Flask 和 Django - V2EX
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 6147 次点击
    这是一个创建于 2755 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很多帖子问学哪个,打个比方,就好比房子,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,而且我发现可能是我一开始接触的就是 Dango,所以使用 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     Solana     4984 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 03:48 PVG 11:48 LAX 19:48 JFK 22:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86