V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · Mar 13, 2020 · 6492 views
    This topic created in 2241 days ago, the information mentioned may be changed or developed.
    2019.1 flask star - django star = 2000
    2020.3 flask star - django star = 1600
    
    Supplement 1  ·  Mar 13, 2020
    小总结: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. 独立开发,自己维护。
    
    Supplement 2  ·  Mar 30, 2020
    希望不是这个帖子的问题,才二十多天 现在 差距 1481 了~
    Supplement 3  ·  Apr 2, 2020
    http://www.chaoyue.red/get_stars 记录了下历史
    30 replies    2020-08-06 15:26:44 +08:00
    sunkai0609
        1
    sunkai0609  
       Mar 13, 2020
    python 讲性能。。。,都是用来做小项目吧,哪个顺手用哪个
    mywaiting
        2
    mywaiting  
       Mar 13, 2020   ❤️ 4
    因为大家都发现,想要 Flask 完整具备线上跑产品的能力,最后都各种加插件

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

    把这些插件都加上后

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

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

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

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

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

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

    建议:
    如果是不复杂的小项目或者为了学 web 原理,上 flask 很方便,能学到很多底层的思想和原理。
    但当业务上了体量之后,直接选 Django 更好,不需要过多的折腾。
    bnm965321
        21
    bnm965321  
       Mar 13, 2020
    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  
       Mar 13, 2020
    MDN 的这个 Django 教程我觉得起到了不小的宣传效果。
    Aether
        23
    Aether  
       Mar 13, 2020
    套用一句话来说,绝大部分项目都没到比较两个框架哪个好的地步。
    mimzy
        24
    mimzy  
       Mar 13, 2020 via Android
    差距越来越小我觉得还有一个原因,自从 Flask 创始人沉迷 Rust 以后 Flask 团队的开发最近已经不活跃了,反观 Django 3 的路线图里要做的工作和时间节点还是很清晰的。
    james122333
        25
    james122333  
       Mar 14, 2020
    大而全 小而精之争?
    不用争了 大而全如果够好 里面的组件也就会是小而精
    之所以没显现问题只是因为需求面窄 一有状况马上就经不起考验了
    社会的进步什么时候不讲精致度了? 一味追求大而全里面组件乱七八糟当然是没什么用的
    johnsona
        26
    johnsona  
       Mar 14, 2020 via iPhone
    @gsz2015 flask 用来学 web 开发是一个什么流程就好了。一个权限设计功能,flask 堆积木一样堆装饰器。Ddrf 得做法更优雅。Django 有不少开源商业项目。flask ?没听说过。。开玩笑,有的。宝塔面板还有一个调度工具忘了名字了
    noparking188
        27
    noparking188  
       Mar 15, 2020
    Django 省事
    johnsona
        28
    johnsona  
       Apr 16, 2020
    时隔多日,再来批判 flask,最近一个功能是根据配置文件在文件系统和 oss 对象存储系统之间切换,flask:什么 storage ? django:django.core.file.storage,flask:没听说过,好像有一些第三方库,除了十几个赞,7-8 年前最后提交也没什么嘛。django:操,受不了
    johnsona
        29
    johnsona  
       Apr 16, 2020
    再来批判,flask 没有阿里云 oss 的扩展包,django 有,django 再得一分
    johnsona
        30
    johnsona  
       Aug 6, 2020
    再来批判,django 可以在配置文件安装其他 app,flask?我看到有人自己造了一个,还有什么解决办法? distributewsgi?tui
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2583 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 07:00 · PVG 15:00 · LAX 00:00 · JFK 03:00
    ♥ Do have faith in what you're doing.