欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Django和Flask这两个框架在设计上各方面有什么优缺点?

程序员文章站 2022-05-05 12:17:22
...
如果可以的话,请从整体设计,路由设计,应用模块化设计,配置等方面比较一下这两个框架。
十分感谢。

回复内容:

谢邀,话题有些大,网上的比较也比较多,知乎现在娱乐化严重,这里就简单说一下,欢迎大家一起探讨。
一、整体设计方面
首先,两者都是非常优秀的框架。整体来讲,两者设计的哲学是区别最大的地方。
Django提供一站式的解决方案,从模板、ORM、Session、Authentication等等都分配好了,连app划分都做好了,总之,为你做尽量多的事情,而且还有一个killer级的特性,就是它的admin,配合django-suit,后台就出来了,其实最初Django就是由在新闻发布公司工作的人设计的。
Flask只提供了一些核心功能,非常简洁优雅。它是一个微框架,其他的由扩展提供,但它的blueprint使它也能够很方便的进行水平扩展。
二、路由设计
Django的路由设计是采用集中处理的方法,利用正则匹配。Flask也能这么做,但更多的是使用装饰器的形式,这个有优点也有缺点,优点是读源码时看到函数就知道怎么用的,缺点是一旦源码比较长,你要查路由就不太方便了,但这也促使你去思考如何更合理的安排代码。
三、应用模块化设计
Django的模块化是集成在命令里的,也就是说一开始Django的目标就是为以后玩大了做准备的。每个都是一个独立的模块,为以后的复用提供了便利。
Flask通过Blueprint来提供模块化,自己对项目结构划分成不同的模块进行组织。
四、配置
Django的配置主要还是靠settings.py来做,当然为了Development和Production环境分离,还有一些方法来处理配置。
Flask的配置很灵活,有多种方法配置,不同环境的配置也非常方便。
五、文档
两者都提供了详尽的文档,Flask的文档风格很受我个人喜好,Django的文档也非常优秀,当时用学Django时,就是只看了Django的文档。
六、社区
Django社区很大,各种插件很齐全,大部分情况下你都能找到你想要的。
Flask起步晚,但社区也不小,之前有一次看在github上的star数,两个相差并不远,说明越来越多的人关注它,虽然插件没那么全,但常用的还都是有的,而且质量都比较高。
最后再次说一下,两个都是非常优秀的框架,很多时候选用这些框架是根据实际项目侧重不同来选的:-) 这两个框架我都在用,补充点我对这两个框架的感受吧

(1)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更加吻合

(2)Django

  • Django太重了,除了web框架,自带ORM和模板引擎,灵活和*度不够高
  • Django能开发小应用,但总会有“杀鸡焉用牛刀”的感觉
  • Django的自带ORM非常优秀,综合评价略高于SQLAlchemy
  • Django自带的模板引擎简单好用,但其强大程度和综合评价略低于Jinja
  • Django自带ORM也使Django与关系型数据库耦合度过高,如果想使用MongoDB等NoSQL数据,需要选取合适的第三方库,且总感觉Django+SQL才是天生一对的搭配,Django+NoSQL砍掉了Django的半壁*
  • Django目前支持Jinja等非官方模板引擎
  • Django自带的数据库管理app好评如潮
  • Django非常适合企业级网站的开发:快速、靠谱、稳定
  • Django成熟、稳定、完善,但相比于Flask,Django的整体生态相对封闭
  • Django是Python web框架的先驱,用户多,第三方库最丰富,最好的Python库,如果不能直接用到Django中,也一定能找到与之对应的移植
  • Django上手也比较容易,开发文档详细、完善,相关资料丰富

上面这段内容摘自我的博客文章:Flask 入门指南(Gevin's Blog),时不时就会在讨论Django和Flask的话题中被我摘出来单独讨论 :P flask相比更加灵活,它可以让你更*的组织模块,你可以写个单文件的app,这可以分层写app,也可以用蓝本实现模块话,这取决于你的习惯和需求。使用不同的方式调用数据库等等,每个功能都可以选择,你可以用其他人写的中间件,也可以自己写中间件,或者不用中间件自己实现。而django就不行,你用它就得一路到底,它给你啥也包好了。说的术语点就是django是强耦合的,flask是弱耦合的 django是早期框架,各种组件齐全,但是都是自己的一套,很难单独拿出来用,优势是admin。
flask是后期的设计,比较符合pythonic的设计理念。但是需要使用外部的模板库和orm等组件。我们在实践中更喜欢后一种方式。因为django的组件功能较弱。在企业开发中不太好用。

现在的框架,基本都是一个样的,路由设计都是装饰风格的,比如flask,pyramid,bottle。而tornado这类属于服务器类框架,不好和纯app框架比较。

django比较适合中等规模项目。
对于应用开发来说,应该根据不同需求选择不同框架。现在我们基本都是以pyramid为中心混着用。优点是配置灵活,开发简单,稳定可靠,经过了多年的检验 用久了django都不会写python啦⋯⋯