V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
wuwukai007
V2EX  ›  Python

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

  •  
  •   wuwukai007 · 2020-03-13 17:31:42 +08:00 · 5777 次点击
    这是一个创建于 1742 天前的主题,其中的信息可能已经有所发展或是发生改变。
    2019.1 flask star - django star = 2000
    2020.3 flask star - django star = 1600
    
    第 1 条附言  ·  2020-03-13 23:22:58 +08:00
    小总结:Django
                  1.开箱即用,
                  2.适合团队协作 (以独立app开发 )
                  3.经过大量生产考验,比较稳定(Instagram,领英,NASA,Mozilla,国家地理杂志,Open Knowledge 
                       Foundation,Pinterest和Open Stac)
                  4.教科书级的文档(建议出本书)。
                  5.觉得 Sqlalchemy 文档是天书~~
                  6.有干爹 (Django基金会,Instagram)
                  7.自带调试shell,自带migrations,以及根据数据库表反向生成 models ( inspectdb)
                  8.自带缓存系统cache,可以缓存python对象到 redis
                  9.自带文件存储后端storage 。
                  
               Flask
                  1. 单文件跑web,比如我就3个接口,一个文件足够了!
                  2. 我就不想用 Django的 User ,admin ,Session,permission
                  3. 单纯的返回Json 简单数据,没有用户系统。
                  4. 独立开发,自己维护。
    
    第 2 条附言  ·  2020-03-30 15:21:51 +08:00
    希望不是这个帖子的问题,才二十多天 现在 差距 1481 了~
    第 3 条附言  ·  2020-04-02 15:31:18 +08:00
    http://www.chaoyue.red/get_stars 记录了下历史
    30 条回复    2020-08-06 15:26:44 +08:00
    sunkai0609
        1
    sunkai0609  
       2020-03-13 17:38:12 +08:00
    python 讲性能。。。,都是用来做小项目吧,哪个顺手用哪个
    mywaiting
        2
    mywaiting  
       2020-03-13 18:15:26 +08:00   ❤️ 4
    因为大家都发现,想要 Flask 完整具备线上跑产品的能力,最后都各种加插件

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

    把这些插件都加上后

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

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

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

    顺便说,想要 Flask 用得好,还要去看一遍 Werkzeug 才算理解深刻,不然,你能明白 Flask 的 g 是怎么实现的???
    windfarer
        3
    windfarer  
       2020-03-13 18:17:26 +08:00 via Android
    楼上说得对
    est
        4
    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
        5
    est  
       2020-03-13 18:38:57 +08:00
    flask 那个 @route 写起来爽,代码结构和测起来火葬场。
    oncethink
        6
    oncethink  
       2020-03-13 18:45:37 +08:00 via iPhone
    Django 的项目结构设计得合理,要自己搞不知道会搞成什么模样。
    wangyzj
        7
    wangyzj  
       2020-03-13 18:51:59 +08:00 via iPhone
    我之所以用 flask 是因为里面的插件别的时候也用得到
    dj 自己的东西
    再就是因为 dj 初学上手容易,培训班教的也多,所以 star 多吧
    tiedan
        8
    tiedan  
       2020-03-13 18:53:30 +08:00
    我个人喜欢 Django,用起来很舒服
    hanai
        9
    hanai  
       2020-03-13 19:02:06 +08:00
    前后端分离和用 django 不冲突啊
    jmyz0455
        10
    jmyz0455  
       2020-03-13 19:15:51 +08:00
    @mywaiting 感谢,最近想学 Flask 或者 Django,你的回答解除了我的疑虑。
    fire2y
        11
    fire2y  
       2020-03-13 19:17:02 +08:00
    django 用起来很轻松 资料也多
    a852695
        12
    a852695  
       2020-03-13 19:31:52 +08:00
    django 的设计比较好,flask 足够轻量,但是对于多 app 就要自己造轮子
    johnsona
        13
    johnsona  
       2020-03-13 19:50:04 +08:00   ❤️ 7
    我特意注册账号来回答,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
        14
    johnsona  
       2020-03-13 19:57:27 +08:00
    还有巨多要吐槽的,django 文档会教给你很多 web 开发的东西,flask,就小册子,剩下自己想去吧你
    lsvih
        15
    lsvih  
       2020-03-13 20:01:46 +08:00
    DRF 相当好用
    ITsWHY
        16
    ITsWHY  
       2020-03-13 20:07:38 +08:00 via Android
    请问有没有什么开源的 django 项目适合刚入门的初学者学习的?
    guili618
        17
    guili618  
       2020-03-13 20:13:59 +08:00
    @jsisjs20130824 批判的好,😂😂😂
    guokeke
        18
    guokeke  
       2020-03-13 21:22:55 +08:00
    讲道理,只要是个正常的产品项目就是一个越做越大的东西,一个开始上了 flask,后面大了,肯定后悔当初没上 django。
    Akkuman
        19
    Akkuman  
       2020-03-13 21:40:03 +08:00 via Android
    临时写个东西,或者自用小项目,flask 简平快

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

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

    建议:
    如果是不复杂的小项目或者为了学 web 原理,上 flask 很方便,能学到很多底层的思想和原理。
    但当业务上了体量之后,直接选 Django 更好,不需要过多的折腾。
    bnm965321
        21
    bnm965321  
       2020-03-13 22:41:38 +08:00
    django 的设计哲学叫做 opinionated,他们觉得提供给你的方法就是最好的,对于选择困难症 /完美主义者都是福音。

    所以 django 的 slogan 叫做: The Web framework for perfectionists with deadlines

    关于 opinionated: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Introduction
    bnm965321
        22
    bnm965321  
       2020-03-13 22:43:28 +08:00
    MDN 的这个 Django 教程我觉得起到了不小的宣传效果。
    Aether
        23
    Aether  
       2020-03-13 23:27:22 +08:00
    套用一句话来说,绝大部分项目都没到比较两个框架哪个好的地步。
    mimzy
        24
    mimzy  
       2020-03-13 23:31:16 +08:00 via Android
    差距越来越小我觉得还有一个原因,自从 Flask 创始人沉迷 Rust 以后 Flask 团队的开发最近已经不活跃了,反观 Django 3 的路线图里要做的工作和时间节点还是很清晰的。
    james122333
        25
    james122333  
       2020-03-14 00:13:58 +08:00
    大而全 小而精之争?
    不用争了 大而全如果够好 里面的组件也就会是小而精
    之所以没显现问题只是因为需求面窄 一有状况马上就经不起考验了
    社会的进步什么时候不讲精致度了? 一味追求大而全里面组件乱七八糟当然是没什么用的
    johnsona
        26
    johnsona  
       2020-03-14 23:19:53 +08:00 via iPhone
    @gsz2015 flask 用来学 web 开发是一个什么流程就好了。一个权限设计功能,flask 堆积木一样堆装饰器。Ddrf 得做法更优雅。Django 有不少开源商业项目。flask ?没听说过。。开玩笑,有的。宝塔面板还有一个调度工具忘了名字了
    noparking188
        27
    noparking188  
       2020-03-15 21:56:25 +08:00
    Django 省事
    johnsona
        28
    johnsona  
       2020-04-16 15:31:03 +08:00
    时隔多日,再来批判 flask,最近一个功能是根据配置文件在文件系统和 oss 对象存储系统之间切换,flask:什么 storage ? django:django.core.file.storage,flask:没听说过,好像有一些第三方库,除了十几个赞,7-8 年前最后提交也没什么嘛。django:操,受不了
    johnsona
        29
    johnsona  
       2020-04-16 19:35:25 +08:00
    再来批判,flask 没有阿里云 oss 的扩展包,django 有,django 再得一分
    johnsona
        30
    johnsona  
       2020-08-06 15:26:44 +08:00
    再来批判,django 可以在配置文件安装其他 app,flask?我看到有人自己造了一个,还有什么解决办法? distributewsgi?tui
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.