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
coolair
V2EX  ›  Python

Flask 和 Django

  •  1
     
  •   coolair · 2018-05-18 16:51:57 +08:00 · 5563 次点击
    这是一个创建于 2141 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很多帖子问学哪个,打个比方,就好比房子,Flask 是给你地基你自己去建,Django 是给你个毛坯房,你自己去装修。

    然后问题就来了,对于 Flask 来说,各种 extensions 就好比建房子的材料,你得选好供应商,才能确保房子的可靠性。

    当然了,如果你仅仅是写一个简单的应用,比如搭个茅草屋而已,那不用扩展全自己折腾也是没问题。但是,如果你的应用在可预见的时间里会变成一个大型应用,就好比,最后它被搭成了 10 层楼。

    这个时候你就会发现,一切不是你最初看到的那么简单,很多 extensions 你都 fork 了一份啊,打了好多补丁啊,你会发现你搭的这玩意怎么这么糟糕啊。然后,你开始重构……

    这个时候你就会需要 Django 了,嗯,十层楼的框架给你了,你自己装修好就行。

    额……是这么个理么?
    36 条回复    2018-05-21 22:34:19 +08:00
    wellsc
        1
    wellsc  
       2018-05-18 17:03:10 +08:00
    不是这样的,现在都流行 soa 化,很多应用内的状态都会保存在数据库之类的中间件上去了,不会再 web app 里面去,soa 的服务只要保证能够快速读取状态,处理请求就好了,像 django 和 rails 之类的应用内部状态复杂的框架现在会显得臃肿,大部分内容都不会被用到的。
    Eaveees
        2
    Eaveees  
       2018-05-18 17:07:48 +08:00
    Emmm 我觉得差不多
    不过技术选型一开始就该定下来起码不要拿 Flask 搭十层茅草屋了吧
    毕竟是来快速轻量开发应用的...
    ycz0926
        3
    ycz0926  
       2018-05-18 17:20:02 +08:00
    @wellsc 前提是你人手要够
    ycz0926
        4
    ycz0926  
       2018-05-18 17:21:06 +08:00
    不然,还是 django 这种来的好,不是什么东西都适合分布式的,饼摊大点固然好
    doubleflower
        5
    doubleflower  
       2018-05-18 17:21:40 +08:00
    django 也就多了个内置 db,其它用到不多,还搞得复杂
    Hopetree
        6
    Hopetree  
       2018-05-18 17:23:32 +08:00   ❤️ 1
    但是据我说知,新手用 flask,一般水平用 Django,高手还是 flask

    大概的意思就是,很简单的东西,你用 flask 就够了,一般规模的东西,你用 django 就够,大型的规模,flask 更好(只说这两个框架,其他的框架不作为参考)
    sagaxu
        7
    sagaxu  
       2018-05-18 17:24:10 +08:00 via Android   ❤️ 1
    @wellsc soa 会带来很高的服务治理和运维成本,不太适合很小的团队
    Hopetree
        8
    Hopetree  
       2018-05-18 17:25:46 +08:00
    不过,我喜欢 Django,而且我发现可能是我一开始接触的就是 Django,所以使用 flask 的时候总是习惯按照 django 的项目结构去组织 flask,然后写着写着就发现跟 django 很像了
    zhuangzhuang1988
        9
    zhuangzhuang1988  
       2018-05-18 17:28:18 +08:00
    用过 flask 的表示不要作死, 还是 django 好
    mcfog
        10
    mcfog  
       2018-05-18 17:33:52 +08:00
    反咯,当你要做一个特别简单的东西的时候,你应该找一个功能特别多的毛坯房,毕竟装修完就能入住

    但你造十层楼的时候,还是从地基开始造反而更容易,毕竟比起把方的毛坯房弄成产品想要的圆形,还是自己搭更快风险更小

    如果你要造一百层楼,那你就得从砖头、水泥、选址开始考虑了,毛坯房是什么?
    wellsc
        11
    wellsc  
       2018-05-18 17:38:50 +08:00
    @ycz0926 #3 同样的团队体量下,我怎么觉得解耦之后能更加节省人手呢?很多以前应用内的状态都只需要从现成的中间件读写一下就好了,不需要在应用内部维护上下文,处理不同人员的代码逻辑之类的,开发过程会舒畅很多。



    @Hopetree #6 不存在高手用姜戈,低手用 flask 的说法,我觉得对于一个基础过得去(指的是有一定的网络知识,软件工程意识,算法知识等等)的开发人员来说,这两个框架本质都是一样的,CRUD 鹅已。
    monkeylyf
        12
    monkeylyf  
       2018-05-18 17:39:44 +08:00
    有需求的话就自己做“建房子的材料”和没需求的时候“为什么有这块墙在这里好碍眼“的区别。
    有些时候用小型 RESTFUL 服务肯定是不会选 django 的。flask 相对灵活。当然也有灵活的代价。
    xrlin
        13
    xrlin  
       2018-05-18 17:45:46 +08:00
    只用过 flask 的路过,Django 只看过一遍官方的 tutorial,没有实际用过,但是我之前写 flask 的时候也会参考 Django 的组织模式,flask 也需要很多 extension,做着做着就和 Django 差不多了,但是前后端分离,只提供 api 我感觉 flask 会更简单些。
    KKKKKK
        14
    KKKKKK  
       2018-05-18 17:49:36 +08:00 via iPhone
    SKYNE
        15
    SKYNE  
       2018-05-18 17:54:51 +08:00
    光会用 Django 的路过
    nullcc
        16
    nullcc  
       2018-05-18 18:07:20 +08:00
    如果大部分功能都是 CRUD 的项目,选哪个都没差
    有并发需求的上 Tornado,或者 Sanic
    111111111111
        17
    111111111111  
       2018-05-18 18:44:23 +08:00 via Android
    @KKKKKK 思考和分享是个很赞的事情,不过……

    “““
    Flask 只是一个单独的 Web Framework,Tornado 还包含了 HTTPClient,意思是 Tornado 内置的服务器可以直接用于生产环境,Flask 还需要依靠 Gunicorn 和 Gevent 来用于生产环境和提升性能。 或许在部署方式上,Tornado 获胜
    ”””

    tornado 可以直接用于生产环境,和 HTTPClient 没有必然联系吧,
    另外聊 Tornado 的时候不说说长链接,会感觉不全面
    个人资料,仅供参考
    fushall
        18
    fushall  
       2018-05-18 18:55:57 +08:00
    萝卜青菜,各有所爱呗,你可以都试一试,选一个自己喜欢的。
    对于我个人来说,接触 flask 的时间比较长,
    也常常写一些小东西,积累了一些代码,所以更加喜欢 flask 了。
    Kilerd
        19
    Kilerd  
       2018-05-18 20:14:23 +08:00
    @111111111111

    那里确实是表达错了,主要想表达的意思是说 Tornado 无需依赖其他库就可以直接部署在服务器上。
    WildCat
        20
    WildCat  
       2018-05-18 20:15:12 +08:00
    赚钱还是 Rails。人生苦短,我用 Rails。Rails 5 倍生产力。
    PythonAnswer
        21
    PythonAnswer  
       2018-05-18 20:16:58 +08:00 via iPhone
    有时候需要搭个大排档而已
    有时候要写字楼
    gotounix
        22
    gotounix  
       2018-05-18 21:02:24 +08:00
    从 Django 转到 Flask,然后又转到 Django ……
    yuhr123
        23
    yuhr123  
       2018-05-18 21:34:32 +08:00 via iPhone
    用 flask 真的可以很轻松的把项目写出来,Django 需要遵循的东西多一些,我个人不大喜欢那种束缚。就像 rails 我也不大喜欢一样。什么都有,换言之什么都有规则,不遵循跑不起来呀。
    Rob007
        24
    Rob007  
       2018-05-18 21:41:01 +08:00
    两个我都用过。做 CRUD,Django 和 Flask,都很好用。Django 大而全,Flask 小而灵活。
    gjquoiai
        25
    gjquoiai  
       2018-05-19 00:38:11 +08:00
    借楼问一下,有没有大佬在生产环境用过 quart ?表现怎么样?
    param
        26
    param  
       2018-05-19 00:57:02 +08:00 via Android
    我最近做了一个 API star + Django ORM 的项目
    pabupa
        27
    pabupa  
       2018-05-19 01:21:58 +08:00
    Django 束手束脚的,,,hin 烦~
    v2dead
        28
    v2dead  
       2018-05-19 02:30:38 +08:00
    用 flask 盖房子你起码对整栋楼有个全面掌控,哪里设计不好,哪里什么户型,哪里上电梯。
    上了 django 第一件事情不是装修是开始打墙,熟悉的还好,知道哪原有结构,怎么敲个两面墙就能成我要的户型,原本哪有电梯就可以直接用,最后才是装修。不熟悉的就惨了,直接上项目用 django,左砸一面墙,右砸一面墙,发现墙后面还有墙,打完墙把下水给砸穿了还得补下水,最后整个楼全是洞,到处漏水,还被同事问,这么完整一套毛坯房怎么装修成这个鬼样子,不就是叫你加个空调管你把半栋楼给拆了。
    est
        29
    est  
       2018-05-19 06:45:06 +08:00 via Android
    flask 只给你修了个核心筒。外墙楼板自己搞

    django 简装。
    iConnect
        30
    iConnect  
       2018-05-19 07:41:30 +08:00 via Android
    flask 支持插件扩展 extensions 这点,理念上就更现代。也许开始没有 django 多年的积累来的完善,但先进性是明摆着的。插件的质量和丰富性都有了很大进步
    deadEgg
        31
    deadEgg  
       2018-05-19 14:20:38 +08:00
    两者都用过。

    总觉着 django 比 flask 顺手且标准。

    可能 django 结构化的东西+强大扩展,让我感觉它去实现一个 webapp 更加顺手好使。
    ebingtel
        32
    ebingtel  
       2018-05-19 20:32:14 +08:00
    pythonee
        33
    pythonee  
       2018-05-19 23:23:45 +08:00
    @WildCat 现在 rails 有什么大发展吗
    WildCat
        34
    WildCat  
       2018-05-19 23:31:12 +08:00
    @pythonee

    抛开工作不谈,一些比较有用的新特性:

    1. Webpacker,和大前端趋势结合
    2. ActionStorage,默认包含 s3, google cloud, azure,生态里已经有了 七牛、upyun 等,大幅简化开发
    3. 生态方面:wechat-rails 大幅简化开发

    Django 个人觉得有用的只有两点:
    1. 成熟的 RBAC system
    2. 模块化设计

    然而 Django 的一些设计理解不能:
    1. View 本身其实是 controller,这个错误的 terminology 让我不能忍
    2. 没有好用的 generator
    3. Model 层不够好用
    4. Migration 自动生成,缺乏灵活性与兼容性 ( schema 这么重要的东西怎能自动生成?)
    WildCat
        35
    WildCat  
       2018-05-19 23:31:34 +08:00
    Django 最硬伤的一点是:没有优秀的测试最佳实践。
    encro
        36
    encro  
       2018-05-21 22:34:19 +08:00
    Django 是开发商送的精装,
    Flask 是毛坯,
    框架就是地基,
    这两个地基都不错,
    都够你做成百层高楼了,
    至于选精装还是毛坯,
    看你定制需求高不高。
    楼上说 Django 没有测试最佳实践,这个是因为文档都没有看全吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:12 · PVG 06:12 · LAX 15:12 · JFK 18:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.