根据JetBrains对Python开发人员的调查,Flask和Django是迄今为止最受欢迎的两个PythonWeb框架。如果您刚开始使用Python进行Web开发,您一定想知道应该在下一个项目中学习或使用哪种Python框架。其实,如果我们仔细对比一下Flask和Django这两个框架,或许这个选择并不难做出。Flask和Django概述Flask是一个用Python编写的Web应用程序框架。它是由工程师ArminRonacher领导的名为Pocco的国际Python爱好者小组开发的。它创建于2010年,被认为是一个年轻的平台。FlaskFlask基于WSGI概念和Jinja-2模板引擎。它是一个轻量级的微服务框架,允许开发者自由选择设计模式、数据库和工具。开发人员可以使用Flask构建Web应用程序和创建WebAPI,也可以使用它来开发机器学习应用程序并实施大量端到端项目。相比之下,创建于2005年的Django是一个免费、开源、成熟的高级Web应用程序框架,它为快速和可操作的Web应用程序开发提供了通用技术。它支持构建和维护高质量的Web应用程序,使开发过程更顺畅、更省时,其主要目的是构建复杂的数据库驱动的网站。两者在设计上的不同导致了两个框架在以下几个方面的差异:1.规模和灵活性前面提到,Flask是一个轻量级的框架,小巧灵活。相比之下,Django“大而全”,体量更大,支持大量的第三方应用。自然,它不如Flask灵活。事实上,这两个框架最大的区别之一就是灵活性。由于Django是一个完整的web开发框架,Django可以在不使用太多第三方库和工具的情况下开发web应用。但是Django缺少一些模块优化的空间,不支持任何API。因此,开发人员使用内置功能创建Web应用程序。这意味着如果开发者想要修改Django的一些默认设置或规则,并不容易。Flask是一个具有良好扩展性的Web服务器网关接口(WSGI)框架,可以灵活地使用各种Web开发库和工具(包括支持的API)来开发Web应用程序。经验丰富的开发人员可以自由插入并使用他们最喜欢的库和数据库。2.在支持数据库方面,Django包含了一个简单而强大的ORM(ObjectRelationalMapping),它提供了生成和管理数据库迁移的支持。Django支持许多开箱即用的关系数据库,例如SQLite、PostgreSQL、MySQL和Oracle。换句话说,如果你使用的是关系型数据库,Django更容易上手,因为它内置了ORM和迁移管理工具。但是,如果你使用的是非关系型数据库,或者想使用其他的ORM比如SQLAlchemy,Django使用起来并不是很方便。由于Flask相当于一个内核,它不包含数据库抽象层(ORM),也没有指定的数据库。你可以使用MySQL或NoSQL,因此Flask可以提供各种类型的数据库。3.URL这两个框架都允许开发人员将URL映射到视图并支持基于函数和类的视图。对于Django来说,当请求匹配到URL模式时,会将持有HTTP请求信息的请求对象(request)传递给视图,然后调用视图。每当您需要访问请求对象时,都必须在函数中显式传递它。DjangoURL和视图分别在单独的文件urls.py和views.py中定义。在Flask中,Flask的核心是使用Werkzeug,它提供URL路由和请求/响应处理。在Flask中,请求对象request是全局的,因此您可以更轻松地访问它(只需导入它)。也就是说,Flaskweb应用框架的URL发送者是一个RESTful请求,而Django框架的URL发送者是建立在常规路由上的。除了以上几个方面,Flask和Django在操作风格、认证、文档和导航、模板引擎等方面也存在差异。由于这两个框架在很多方面都不同,各自的优缺点也很明显。我用下表总结了Flask和Django的优缺点:ProjectFlaskDjango的优点1.对新技术的兼容性更高;2.简单案例容易实现;3.代码库很小;4.应用可扩展性强;5.易于搭建快速原型;6.路由URL易于构建和维护应用程序;7、数据库集成容易;8.内核小,易于扩展;9.最小的可用平台;10.网上有很多资源,尤其是在GitHub上1.Django的设置和运行非常简单;2.Django提供多种语言的网站;3、Django允许端到端的软件测试;4.允许使用HTML输出记录API;5、REST框架提供了丰富的认证规则;6.可用于限制个人用户的API请求速率;7、可以勾勒出URL的样式;8、提供完善的认证体系;9、缓存框架自带多种缓存机制;10.用于快速Web应用程序开发的高级框架;11.可以调用大量的工具;12.使用Python类进行数据处理建模的缺点1.MVP在大多数情况下发展缓慢;2、复杂系统改造成本增加;3、大型项目综合改造;4.异步可能是个小问题;5.缺乏数据库和ORM;6.构建大型项目需要对框架有一定的先验知识;7.与Django1相比,提供有限的支持和更小的网络。平台非常大;2、对新技术的兼容性差;3、代码库大;4.自动重新加载并重启整个服务器;5.一次只允许处理一个请求;6、路由需要一定的正则表达式知识;7、组件可以安装在一起,容易造成混淆。Flask和Django各有优缺点,如何选择,如何选择?这需要具体情况具体分析。选择使用框架取决于开发者自身的经验以及使用什么样的项目。就开发者本身而言,如果是初学web开发而不是Python,建议从Flask入手。Django复杂而庞大。从项目结构到设置再到安装,有很多新手不懂的细节。新手往往会在学习过程中迷失方向,最终花费大量时间了解Django本身,而没有学习实际的基础知识。所以如果你需要了解一个web框架,就从Flask开始吧。Django和Flask有很多相似的简单原理。另外,还有很多网站是用Flask开发的,其性能可以媲美Django开发的网站。对web开发有了一定的了解之后,再去学习Django。随着你的任务负载增加,你会发现在Flask中添加新功能非常困难,但在Django中却轻而易举。就项目而言,Flask适用于范围明确且预期寿命较短的小型、不太复杂的项目。由于Django强制执行一致的应用程序结构,因此无论项目大小,几乎所有Django项目都具有相似的结构。因此,Django更擅长处理生命周期更长、增长潜力更大的大型项目(拥有更大的团队),更适应团队不时加入新开发人员的情况。除此之外,如果您只是开发一个纯静态网站或提供RESTAPI,那么Flask就足够了。而如果你想创建功能齐全的网络应用程序(如新闻网站、电子商务网站、ERP等),那么Django会更好。希望本文能帮助您选择PythonWeb框架。译者介绍王德真,51CTO社区编辑,10年互联网产研经验,6年IT教育培训行业经验。前K12教育上市公司产品经理,技术博客专家,蓝桥签约作者,《滚雪球学Python》专栏作者,《爬虫100例》专栏特约作者,78技术人社区发起人。参考链接:https://dzone.com/articles/flask-vs-django-which-python-framework-to-choosehttps://testdriven.io/blog/django-vs-flask/
