Flask 与 Django 的对比
正心全栈编程
2022年03月25日 13:40
收录于文集
共4篇

Django 相当于精装房,开箱即用。

Flask 是毛坯房,需要自己进行装修。

框架的差别

Django

  • Django 太重了,除了 web 框架,自带 ORM 和模板引擎,灵活和自由度不够高

  • Django 能开发小应用,但总会有“杀鸡焉用牛刀”的感觉

  • Django 的自带 ORM 非常优秀,综合评价略强与 SQLAlchemy

  • Django 自带的模板引擎简单好用,但其强大程度和综合评价略低于 Jinja2

  • Django 自带 ORM 也使 Django 与关系型数据库耦合度过高,如果想使用 MongoDB 等 NoSQL 数据,需要选取合适的第三方库,且总感觉 Django+SQL 才是天生一对的搭配, Django+NoSQL 砍掉了 Django 的半壁江山

  • Django 目前支持 Jinja2 等非官方模板引擎

  • Django 非常适合企业级网站的开发:快速、靠谱、稳定

  • Django 成熟、稳定、完善,但相比于 Flask , Django 的整体生态相对封闭

  • Django 是 Python web 框架的先驱,用户多,第三方库最丰富,最好的 Python 库,如果不能直接用到 Django 中,也一定能找到与之对应的移植

  • Django 上手也比较容易,开发文档详细、完善,相关资料丰富

Flask

  • Flask 确实很“轻”,不愧是 Micro Framework ,从 Django 转向 Flask 的开发者一定会如此感慨,除非二者均为深入使用过

  • Flask 自由、灵活,可扩展性强,第三方库的选择面广,开发时可以结合自己最喜欢用的轮子,也能结合最流行最强大的 Python 库

  • 入门简单,即便没有多少 web 开发经验,也能很快做出网站

  • 非常适用于小型网站

  • 非常适用于开发 web 服务的 API

  • 开发大型网站无压力,但代码架构需要自己设计,开发成本取决于开发者的能力和经验

  • 各方面性能均等于或优于 Django

  • Django 自带的或第三方的好评如潮的功能, Flask 上总会找到与之类似第三方库

  • Flask 灵活开发, Python 高手基本都会喜欢 Flask ,但对 Django 却可能褒贬不一

  • Flask 与关系型数据库的配合使用不弱于 Django ,而其与 NoSQL 数据库的配合远远优于 Django

  • Flask 比 Django 更加 Pythonic ,与 Python 的 philosophy 更加吻合

Django功能大而全,Flask只包含基本的配置,Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。

Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。

Flask 比 Django 更灵活 用Flask来构建应用之前,选择组件的时候会给开发者带来更多的灵活性 ,可能有的应用场景不适合使用一个标准的ORM(Object-Relational Mapping 对象关联映射),或者需要与不同的工作流和模板系统交互。

学习的差距

无论您的最终目标是学习 Flask 还是 Django,建议从 Flask 开始。这是学习 Web 开发基础知识和最佳实践以及几乎所有框架都通用的Web 框架核心部分的绝佳工具。

Flask 比 Django 更轻巧,更明确。因此,如果您是Web开发的新手,而不是Python的新手,您会发现使用Flask进行开发要容易得多,因为感觉就像您正在使用 Vanilla Python 来定义请求处理程序和视图一样。

Django 有很多开销。从项目结构到设置,再到安装许多您不了解的细节,您将迷失方向,最终花了很多时间了解Django本身,而没有学到实际的基础知识。

在几乎所有情况下,学习 Django 前建议先学 Flask 。唯一例外的就是你需要快速快速开发一个应用程序来满足某些外部利益相关者的需求。如果已学 Django,只要确保在某个时候回到 Flask 来学习些基础知识即可。

参考

flask和django的区别?: https://www.zhihu.com/question/58030611

Django vs Flask: 到底应该选哪个?: https://zhuanlan.zhihu.com/p/359280800