根据JetBrains 做过的一项Python开发人员调查,Flask和Django是迄今为止最受欢迎的两个Python Web框架。如果你开始使用Python进行Web开发,一定想知道应该学习或使用哪个Python框架用于下一个项目的开发。
其实,如果我们仔细比较一下Flask和Django这两个框架,也许这个选择就不难做出了。
概述Flask和Django
Flask是用Python编写的Web应用程序框架,由工程师Armin Ronacher领导着一个名为Pocco的国际Python爱好者团体开发,于2010年创建,算是一个年轻的平台。FlaskFlask基于WSGI概念,也基于Jinja-2模板引擎,是一个轻量级的微服务框架,让开发者可以自由选择设计模式、数据库及工具。开发人员可以使用Flask构建Web应用程序和创建Web API,也可以用它来开发机器学习应用,实现大量的端到端项目。
相比之下,Django是在2005年创建的,一个免费、开源、成熟的高级Web应用程序框架,这个框架为快速和操作性强的Web应用程序开发提供了通用技术。它支持构建和维护高质量的Web应用程序,使开发过程更加顺畅,更节省时间,其主要目的是构建复杂的数据库驱动网站。
两者在设计上的差异,导致这两个框架在以下几个方面存在区别:
1.体量与灵活性
如前面所言,Flask是一个轻量级的框架,小巧、灵活。相比之下,Django则“大而全”,体量要更大一些,同时支持大量的第三方应用程序,自然也没有Flask那么灵活。
事实上,这两个框架之间最大的差异之一就是灵活性。由于Django是一个完整的web开发框架,因而Django可在不使用太多第三方库和工具的条件下开发web应用程序。但是,Django缺少部分对模块优化的空间,也不支持任何API。因此,开发人员使用内置功能创建Web应用程序。这意味着如果开发人员想要修改Django一些默认的设定或者规则,这将不容易。
而Flask是一个扩展性很好的Web服务器网关接口(WSGI)框架,可以使用各种Web开发库和工具(包括支持API)来灵活地开发Web应用程序。对于经验丰富的开发人员可以自由地插入和使用他们喜欢的库和数据库。
2.支持数据库方面
Django包含一个简单而强大的ORM(对象关系映射),ORM为生成和管理数据库迁移提供支持。Django支持许多现成的关系数据库,比如SQLite,PostgreSQL,MySQL和Oracle。换句话说,如果使用的是关系数据库,则Django由于具有内置的ORM和迁移管理工具,因此入门起来更加容易。但是,如果您使用的是非关系数据库,或者想使用其他的ORM(例如SQLAlchemy),则Django用起来就很不方便。
而Flask 由于相当于一个内核,不包含数据库抽象层(ORM),没有指定的数据库,可以用MySQL,也可以用 NoSQL,因此Flask可提供多种类型的数据库。
3.URL
这两个框架都允许开发者将URL映射到视图,并支持函数和基于类的视图。
对Django来说,当请求与URL模式匹配时,将保存HTTP请求信息的请求对象(request)传递给视图,然后调用该视图。每当需要访问请求对象时,都必须在函数中显式传递它。Django URL和视图分别在urls.py和views.py单独的文件中定义。
而在Flask这里,Flask的核心是使用Werkzeug,它提供了URL路由和请求/响应处理。在Flask中,请求对象request是全局的,因此您可以更轻松地访问它(只要导入即可)。
换句话说,Flask Web应用程序框架的URL发送者是一个RESTful请求,而Django框架的URL发送者是建立在正则路由之上。
除了以上几个方面,Flask和Django还在操作风格、认证、文档和导航、模板引擎等方面存在区别,篇幅所限,这里就不一一展开了。
正因为两个框架在诸多方面存在区别,因而两者各自的优点和缺点都很明显,笔者用下面的这张表来总结Flask和Django的优缺点:
项目 | Flask | Django |
优点 | 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.与Django相比,提供有限的支持和较小的网络
| 1.平台非常庞大; 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可以更好地处理较大的项目(具有较大的团队),这些项目具有更长的生命周期并具有很大的增长潜力,更适应团队会不时地加入新开发人员的情况。
除此之外,如果你只是在开发纯静态网站或提供REST API服务,那么Flask就够用了。而如果你想创建功能全面的Web应用程序(比如新闻类网站、电子商务网站、ERP等),那么Django会更好。
希望这篇文章,会对你选择Python Web框架有帮助。
译者介绍
王德朕,51CTO社区编辑,10年互联网产研经验,6年IT教培行业经验。原K12教育上市公司产品经理,技术博客专家,蓝桥签约作者,《滚雪球学Python》专栏作者,《爬虫100例》专栏特约作者,78技术人社区发起者。
参考链接:
https://dzone.com/articles/flask-vs-django-which-python-framework-to-choose
https://testdriven.io/blog/django-vs-flask/