最近在写一篇博客,里面对 Flask 和 Django 做了一些对比,这部分内容列出来和大家讨论一下,不合适的地方欢迎大家指正
( 1 ) Flask
( 2 ) Django
1
ming2281 2016-04-23 10:14:45 +08:00
都是非常喜爱的 Python-Web 框架, 各有优缺点
都很强大 内心更加偏爱 Flask 一点 :) |
2
fy 2016-04-23 10:25:26 +08:00
如果是这两个我更喜欢 flask ,如果有更多那么我选 tornado
|
3
wph95 2016-04-23 10:57:50 +08:00
个人开发用 Flask
团队开发用 Django > 各方面性能均等于或优于 Django 在我的印象里,看到过多篇性能分析的文章,都是说 django 优于 flask 的 (反正都是 python ,有毛性能可言) |
4
2225377fjs 2016-04-23 10:58:38 +08:00
感觉 Python 的 web 框架真是太多啊,个人大多数只是是拿来做一些 HTTP 的服务,感觉 gevent 加上 tornado 就能解决大多数需求了,性能和扩展性都不错, mongo 和 redis 用起来爽的不要不要的。现在说 Flask 好的人很多,也有很多人说 Bottle 很好,各种各样的,都凌乱了。
|
5
yubang 2016-04-23 11:10:34 +08:00
还是觉得 flask 好用, django 总感觉太重了。不过前后端彻底分离之后, flask 也不想用了,默认带着 jinja2 又用不上看着就纠结。还是用 bottle 接收参数,输出个 json 比较爽。并且 bottle 只有一个文件,自己改造起来也方便。
|
8
zhuangzhuang1988 2016-04-23 12:43:04 +08:00
@tabris17 但是有统一的路由看还是很好的
|
9
virusdefender 2016-04-23 12:57:09 +08:00
django 最喜欢的是 ORM ,其他都差不多。
|
10
yepinf 2016-04-23 12:58:38 +08:00
模板还是喜欢 mako , flask, django,tornado...都可以使用
|
11
SlipStupig 2016-04-23 15:39:36 +08:00
tornado+gevent 解决绝大部分问题
|
12
SlipStupig 2016-04-23 15:40:42 +08:00
但是 pythonweb 框架能不能自动管理路由,算优点也算缺点吧
|
13
gevin OP @wph95 我记得 Flask 相比于 Django ,对 request 的相应速度、数据的序列化反序列化等方面,都要快好多,但基于 Python 的 web 框架,整体性能上还是比其他语言的框架差不少
|
14
wph95 2016-04-23 16:43:40 +08:00
@gevin
json 解析是有点问题 我记得 django1.9 说到并解决了一些 request 你可以 google django flask 两者差 3%以内。 你看国外 instagram disqus mozilla 都是 Django ,基本叫不出哪个公司有用 Flask 的。这不是偶然。 |
15
fy 2016-04-23 16:44:18 +08:00
@SlipStupig 可以的,你写一个简单的 hack 就能用装饰器方式来路由了,不超过 50 行
|
16
only0jac 2016-04-23 17:19:10 +08:00
“而其与 NoSQL 数据库的配合远远优于 Django ”
这个怎么讲? |
17
gevin OP @only0jac Django 自带 ORM 与关系型数据库绑在一起了,配合 NoSQL 数据库相当于要废掉 Django 的 Model ,很多与 Model 绑定的业务逻辑也就废了(如 ModelForm ),所以如果没有特殊原因,为什么要使用 Django+NoSQL 的搭配?
|
19
alexapollo 2016-04-23 18:30:09 +08:00
似乎这篇参考了 SO 上的回答?
|
20
neoblackcap 2016-04-23 18:48:08 +08:00 1
其他的我就不发表观点了,我只想说『 Django 的自带 ORM 非常优秀,综合评价略强与 SQLAlchemy 』这样的评价没有能说明任何问题,以下是我的见解
在 Python 以及关系型数据库 ORM 中对应的 Django 跟 SQLAlchemy 可谓两个很典型例子。 Django 很明显是从 RoR 里面得到启发,因此很多时候它也很像 RoR ,比如 Django 就是典型的 Active Record,数据库里面的行直接映射成 Model 的实例,并且所有对数据库的操作是直接与实例绑定,例子即为: New.objects.create(title='sport', author_name='Neo') 对象(实例)不单单封装了数据库表里面的一行(数据)还封装了数据库的操作,以及在这些数据上面有领域逻辑,比如: User.objects.create_user('john', '[email protected]', 'johnpassword') Active Record 对象不仅仅有访问数据的一些方法,而且还有领域逻辑(我们实际的业务逻辑),而且领域模型中的数据跟数据库基本吻合 而 SQLAlchemy 的领域模型就不一样, SQLAlchemy 是基于 Data Mapper 设计而成的。 SQLAlchemy 的数据操作是不能直接作用与实例,它是通过一个 proxy(Data Mapper)来维护领域模型(大致上对应 SQLAlchemy 里面我们定义的 Model )跟数据库表的映射关系,它最大的优点便是数据库表跟领域模型是两个独立的概念,他们之间的关系是解耦的,因此他们可以独立演变,这之后需要做的只不过是我们去更新 Data Mapper 。因此 SQLAlchemy 给我的最大印象就是,它可以实现多态,比如一个 Animal 类可以对应数据库里面的 Dog 跟 Cat 表,以至于一个 Animal 的 cry 方法可以返回"woof"或者"meow" 同时 SQLAlchemy 还有 core 模块去提供高效率的查询(效率可以达到 raw sql 的水平)同时它的查询方式跟 Django 比起来更多样,比如 SQLAlchemy 的 ORM 模块能提供跟以下 SQL 语句对应的查询方式(仅通过一个查询): select username, score from users join classmates on users.user_id=classmates.user_id where classmates.age > 20 group by (users.username, MAX(users.score)); 我个人是觉得 SQLAlchemy 从功能以及灵活性来说都是源于强于其他 ORM ( python 以及对应关系型数据)。但是它跟 Django 比起来就是它有一个很陡峭的学习曲线,这是它的最大缺点。因此我是建议简单项目或者与 Django 相关的使用 Django ORM ,其他的话,若是你们团队协作,而且会有领域模型跟数据库表演进速度不一致的情况,那么选用 SQLAlchemy 是一个不错的选择。 |
21
gevin OP @alexapollo 完全是我个人观点, Stack Overflow 上有类似的观点?能否发个链接看看
|
23
gevin OP @neoblackcap 你说的没错, SQLAlchemy 比 Django 自带的 ORM 要强大。综合评价一个应用时,除了本身强大的功能外,还考虑了易用性,学习成本等, SQLAlchemy 和 Django 的 ORM 都很优秀,但综合评价时,更多会偏向从开发者的平均水平甚至初学者水平,而不是高手的水平, SQLAlchemy 减分项要稍微多一点。
当然,这也只是我的个人观点 |
24
neoblackcap 2016-04-23 20:05:40 +08:00
@gevin 所以你要说明白,你一句 Django ORM 综合起来比 SQLAlchemy 强,新手还以为是 Django ORM 特性多,性能高。
很多时候就是这样,高灵活性以及低抽象成本必然伴随高的学习成本。 你分享你的具体看法观点,我们都来切磋切磋,这样你我才能进步嘛,仅抛一个结论就出来跟『 vim 大法好』这样有什么区别:-) |
25
gevin OP @neoblackcap 我是说`综合评价`,只是评价,评价最好的不代表是最强的。`综合评价略强`改成`综合评价略高`会不会好一点,貌似`强`这个字引发了歧义。你对这二者是何观点?
|
26
neoblackcap 2016-04-23 20:29:13 +08:00
@gevin 没有观点,选合适的, C++性能高但初学者用会很容易崩掉自己的腿。道理就是这样。我只是觉得仅仅一个结论不能达到你想要分享的初衷。
因为这样一个结论很多时候只能带来,『对啊, Django ORM 就是强』,『开玩笑, SQLAlchemy 才是最好的』,『 Pony ORM 才好,其他都是垃圾』这样无意义的回应。 记得一次与一位大牛聊天,他说编程中我们现在已经有很多资源了,但是好软件,好产品一样很少,这个原因就是人们缺少对事物的了解,以至于无法将资源合理利用。 所以我认为,我们在网上发表我们的观点时候是不是可以尽量地将我们的思考方式展现给大家呢?你是如何得出这个结论,我认为这才是关键,这才是大家想看到的『渔』之道。这样的文章无论是初学者还是中级谋求突破的开发者都会喜欢看到。 若是题主你能做到此步,我相信你的文章就会更精彩 |
27
tairan2006 2016-04-24 08:48:22 +08:00 via Android
我们团队虽然用 Django ,但是基本用 sqlalchemy …自带的 ORM 没人用
|
28
geek123 2016-04-24 11:20:24 +08:00
|
29
broven 2016-04-24 13:03:43 +08:00
是来黑 django 的么, 圣战.
|
30
zhouquanbest 2016-04-24 18:29:41 +08:00
所以我选 Tornado
|
31
jeff_kit 2016-04-27 10:41:31 +08:00
那谁说 Django ORM 是模仿 ROR ,谁先出生的还不清楚吧。
既然说开了,就继续说一说,脱离了使用场景来选 web 框架都是耍流氓。你只是写个 Hello world ,干嘛要用 Django 啊?你需要一个管理后台,用 Flask 搞半年搞不好。 反正我做 web 项目一定会优先考虑自己熟悉的 Django ,生态强大,基础设施完备,马上就能开撸业务逻辑。记得两三年前某大牛朋友看不惯 Django 大而全,亲自带队选了 Flask 来做公司的基础 web 框架,半年后跑来跑我说,妈蛋,我们这半年吭哧吭哧搞出来的东西(用户体系,权限管理系统,管理界面等), Django 里面早就集成好的了,浪费了太多的时间。你们感受下。 |
32
zlandjj 2016-04-28 10:11:49 +08:00
前两天做了几个小功能, django 很多中间件配一下就好了。 生态强大啊 。
|
33
geek123 2018-03-12 11:04:48 +08:00
我还是更推荐先使用 flask 更好些,对技术能力的增长更有好处,django 封装的太厉害了。flask 的入门教程给大家推荐一下:
[http://xc.hubwiz.com/course/562427361bc20c980538e26f]( http://xc.hubwiz.com/course/562427361bc20c980538e26f?affid=v2ex20180312) |