为什么轻量化,前后端分离的大背景下,flask 和 django star 差距却越拉越小了?

2020-03-13 17:31:42 +08:00
 wuwukai007
2019.1 flask star - django star = 2000
2020.3 flask star - django star = 1600
5510 次点击
所在节点    Python
30 条回复
sunkai0609
2020-03-13 17:38:12 +08:00
python 讲性能。。。,都是用来做小项目吧,哪个顺手用哪个
mywaiting
2020-03-13 18:15:26 +08:00
因为大家都发现,想要 Flask 完整具备线上跑产品的能力,最后都各种加插件

加 Jinja 做模板
加 SQLAlchemy 做 ORM
加 WTForms 做表单校验
加 Pybabel 做本地化 i18n

把这些插件都加上后

大家发现自己不过是重新造了一个 Django 的轮子

最关键的是,这轮子造得别扭做作,还不如 Django 大而全全内置的好用

于是大家又回到 Django 的怀抱说真香~

顺便说,想要 Flask 用得好,还要去看一遍 Werkzeug 才算理解深刻,不然,你能明白 Flask 的 g 是怎么实现的???
windfarer
2020-03-13 18:17:26 +08:00
楼上说得对
est
2020-03-13 18:37:54 +08:00
django 本来就很轻量化。


from django.conf.urls import url
from django.http import HttpResponse

DEBUG = True
SECRET_KEY = '2333333'
ROOT_URLCONF = __name__

def home(request):
color = request.GET.get('color', '')
return HttpResponse(
'<h1 style="color:' + color + '">Welcome to the Tinyapp\'s Homepage!</h1>'
) # don't use user input like that in real projects!

urlpatterns = [
url(r'^$', home),
]


这就是是几乎最小化的单文件例子了。说 flask 性能好主要是指早期 jinja2 把模板编译在内存里了渲染速度快。django 每次渲染都要去本地重新读一遍模板文件。。。。(可以配置 cache )
est
2020-03-13 18:38:57 +08:00
flask 那个 @route 写起来爽,代码结构和测起来火葬场。
oncethink
2020-03-13 18:45:37 +08:00
Django 的项目结构设计得合理,要自己搞不知道会搞成什么模样。
wangyzj
2020-03-13 18:51:59 +08:00
我之所以用 flask 是因为里面的插件别的时候也用得到
dj 自己的东西
再就是因为 dj 初学上手容易,培训班教的也多,所以 star 多吧
tiedan
2020-03-13 18:53:30 +08:00
我个人喜欢 Django,用起来很舒服
hanai
2020-03-13 19:02:06 +08:00
前后端分离和用 django 不冲突啊
jmyz0455
2020-03-13 19:15:51 +08:00
@mywaiting 感谢,最近想学 Flask 或者 Django,你的回答解除了我的疑虑。
fire2y
2020-03-13 19:17:02 +08:00
django 用起来很轻松 资料也多
a852695
2020-03-13 19:31:52 +08:00
django 的设计比较好,flask 足够轻量,但是对于多 app 就要自己造轮子
johnsona
2020-03-13 19:50:04 +08:00
我特意注册账号来回答,django 和 flask 都在实际开发中用过。我的答案是别用 flask,用 django,用 drf
flask 适合萌新上来搞清楚 web 开发在干嘛,就像一间毛坯房,你进去就知道,房子长这样,房子是用来住的
django 就像精装修的房子,他告诉你房间应该怎么设计,房子里应该有客厅、电视、沙发,我都给你准备好了。flask 就是让你自己去隔出来客厅,自己去外面买电视、沙发。听起来好,结果装修把你累死了,装修起来的房子还没 django 漂亮,还花了大量的时间,你还美滋滋到处说 flask 轻,django 重。你怎么不说 spring 重呢,有本事你别用 spring。
对比:
1.flask 没有 orm,自己找第三方。python 能打的就 sqlalchemy,功能多,但很多你用不上,而且难用,而且用法丑陋。django 自带 orm 好用,但是高级用法难用,但你可以直接写 sql。
2.在 rest 开发中,flask 的第三方扩展 flask-restful 和 flask 真是一脉相承,要啥啥没有。django 的第三方扩展 drf,一堆东西,序列化,认证,限流、权限。而且源代码质量很高(我就是萌新,怎么了?),通过 drf 你还能学到 web 开发中很多设计方面的知识,比如权限怎么设计,怎么在代码中实现,django 已经手把手教你了,别再去用 flask 自己拍脑袋想了
3.flask 和 django 的第三方扩展对比,django 的扩展开箱即用,写几句配置就完事了。flask,呵呵,找半天找一个还要自己写不少东西,出了问题没人问。
4.单元测试,flask 要自己用 pytest 或者 unittest。django 创建的项目模板里面就有,照着他的写就好了。
5.flask 大型项目要自己设计项目结构,还容易被坑。比如循环引用,找不到 request 或者 g 这个请求上下文。django:没听说过
6. flask 优点,直观,具体。django 缺点,抽象层次高,有的东西给萌新看可能一下子就懵了,为什么要有一个 form 对象,和前端表单傻傻分不清楚,serializer 对象又是什么,为什么要有,session 是干嘛的?匿名用户又是什么鬼。但其实这不是 django 的缺点,而是你对 web 开发不够了解,包括 session 怎么在数据库中存储等等。写了好多,把 flask 批判了一凡想搞个大新闻,下班了
johnsona
2020-03-13 19:57:27 +08:00
还有巨多要吐槽的,django 文档会教给你很多 web 开发的东西,flask,就小册子,剩下自己想去吧你
lsvih
2020-03-13 20:01:46 +08:00
DRF 相当好用
ITsWHY
2020-03-13 20:07:38 +08:00
请问有没有什么开源的 django 项目适合刚入门的初学者学习的?
guili618
2020-03-13 20:13:59 +08:00
@jsisjs20130824 批判的好,😂😂😂
guokeke
2020-03-13 21:22:55 +08:00
讲道理,只要是个正常的产品项目就是一个越做越大的东西,一个开始上了 flask,后面大了,肯定后悔当初没上 django。
Akkuman
2020-03-13 21:40:03 +08:00
临时写个东西,或者自用小项目,flask 简平快

有考虑稍大的项目,还是 django,搭配 drf 也好用,drf 官方文档也写的不错,有些找不到的翻翻源代码也能知道,项目结构更好,可维护性更高

并不是说 flask 可维护性低,只是在代码周期拉得很长,或者说多人协同的时候,一个固定风格的框架对于维护和协同是很有利的,而 flask 在这种情况下想要梳理出更好的结构,前期需要花的功夫还是不少的
gsz2015
2020-03-13 21:54:53 +08:00
@Akkuman @jsisjs20130824 赞同,一个人维护公司项目,刚开始图快上了 flask,很方便。
但项目大起来了的时候,ORM、flask-restful、权限什么的都需要花大量事件去折腾(当然也学到了不少东西)。

建议:
如果是不复杂的小项目或者为了学 web 原理,上 flask 很方便,能学到很多底层的思想和原理。
但当业务上了体量之后,直接选 Django 更好,不需要过多的折腾。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/652559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX