Python Web框架哪家强? Django vs Flask深度对比

对一个刚入门Web开发的新手而言,世界上最悲催的事莫过于花大力气学了一门语言或框架却发现它已经要过气了。如果你刚刚开始使用Python进行Web开发,你一定想知道应该学习或使用哪门Python 框架用于你的下一个项目。很有可能你已经听说过Django,Flask,或者两者兼而有之,但不知道哪个更好。虽然还有其他Python网络框架,如Tornado, Pyramid,Web2py和TurboGears, 但Django和Flask仍然是最流行的Python Web框架。虽说小编我是Django的忠粉(Django=大江狗),但为了使本文更有价值,小编我会尽量客观地对Django和Flask做个深度比较,并帮大家选择一门适合自己的框架。

Python Web框架哪家强? Django vs Flask深度对比

我们将从如下几个方面进行对比,并在最后给你提供建议。

  • 基本介绍与特色

  • 流行度

  • 性能

  • 项目结构

  • 文档与社区


基本介绍与特色

Flask是一个由Python语言写成的轻量级Web框架,最早由奥地利人Armin Ronacher于2010年发布。Flask最显著的特点是它是一个“微”框架,轻便灵活,但同时又易于扩展。默认情况下,Flask 只相当于一个内核,不包含数据库抽象层(ORM)、用户认证、表单验证、发送邮件等其它Web框架经常包含的功能。Flask依赖用各种灵活的扩展(比如邮件Flask-Mail,用户认证Flask-Login,数据库Flask-SQLAlchemy)来给Web应用添加额外功能。Flask的这种按需扩展的灵活性是很多程序员喜欢它的地方。Flask没有指定的数据库,可以用MySQL,也可以用 NoSQL。

Python Web框架哪家强? Django vs Flask深度对比

Django是一个开源的Python Web应用框架,采用了MVT的框架模式,即模型M,视图V和模版T,最早于2005年发布。Django被认为是"大而全"的重量级Web框架,其自带大量的常用工具和组件(比如数据库ORM组件、用户认证、权限管理、分页、缓存), 甚至还自带了管理后台Admin,适合快速开发功能完善的企业级网站。Django自带免费的数据SQLite,同时支持MySQL与PostgreSQL等多种数据库。

Python Web框架哪家强? Django vs Flask深度对比

流行度

Flask和Django均是当今最流行的Python Web框架。截至2019年9月2日,Flask在Github上的星数是46179颗,Django的Github星数是43806颗,两者几乎难分伯仲,其它Python Web框架与Flask和Django星数相差甚远。考虑到Django早发布5年,而Flask在星数上还领先2000多颗,由此可以得知Flask当前略微占优。

从应用上来说,Flask与Django均广泛用于Web应用开发。利用Django开发的著名网站包括Pinterest, Disqus, Eventbrite, Instagram and Bitbucket。不过最近Pinterest改用Flask开发它的API了。其它利用Flask开发的项目包括 Twilio, Netflix, Uber和LinkedIn。Django似乎更多用来开发常规网站,而Flask经常用来开发API(比如Pinterest和Twilio)。(注:这点可以理解。如果只需要开发Web API,Django自带的大而全的网站功能很多用不上,比如缓存和管理后台。)


性能

两者差不多。有些人会说Django会因"大而全"更慢些,其实这是Python的锅。网上有人测试对比过Flask和Django的性能(见下文),两者速度差不多,并无本质差异。


  • https://www.jianshu.com/p/9960a9667a5c

  • https://stxnext.com/blog/2019/05/31/flask-vs-django-comparison/

  • https://blog.csdn.net/qq_35753140/article/details/90233884


项目结构

Django项目的结构布局是刚性的,每个人写的项目结构最后都差不多,你可以清楚地知道在哪个APP的哪个文件夹里找到哪个文件(media目录, static目录, template目录,views.py, models.py, forms.py, etc)。在项目结构上,Flask是很灵活的,你可以随意地组织自己的代码,1000个APP说不定就有有1000种组织代码的方式。不同的人之间因为习惯不同可能导致最后项目结构布局差异很大, 造成后期代码难以阅读和维护。如果大家都严格遵循Flask推荐的代码布局,那么你会发现最后将得到和Django类似的项目结构布局。


文档与社区

Django的文档要更丰富些,目前总的社区人数要更大点。Overstackflow上Django的问题与回答数大概是Flask的3倍以上。不过Flask社区目前也在成长,且速度惊人。


如何选择?

Django和Flask各有利弊,如何选择?其实古人早有答案,杀鸡焉用牛刀。如果你只需要开发一个轻量级网站或者特定的微服务(比如API),你根本用不上Django自带的大而全的组件和功能,这时你应该毫不犹豫地选择Flask。当你想尝试新的技术时,使用Flask也会是个更好的选择,轻便而灵活。如果你的开发项目目标明确,就是要开发包含各种功能的传统企业级网站(比如电商,新闻内容管理,社交网站,办公OA),使用Django能帮你节省不少寻找或开发第三方扩展的精力。开发企业级网站通常由一个团队来进行,Django可插拔式的APP设计思想和刚性的项目结构便于团队后期维护项目代码。从个性上而言,如果你喜欢*灵活,你就选Flask。如果你是结果导向型且怕麻烦的,建议直接Django。


你喜欢Django还是Flask呢?举个手吧!

大江狗原创 - DO NOT COPY

2019.9


更多阅读

Django的未来在哪里?

Django的应用前景怎么样? 有没有更好的Web框架? 学好Django有没有未来?

学好Python Web开发和Django能拿高工资吗?

Python Web框架哪家强? Django vs Flask深度对比