首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

Flask 和 Django

  •  1
     
  •   coolair · 7 天前 · 2698 次点击
    很多帖子问学哪个,打个比方,就好比房子,Flask 是给你地基你自己去建,Django 是给你个毛坯房,你自己去装修。

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

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

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

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

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

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

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

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



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

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

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

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

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

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

    可能 django 结构化的东西+强大扩展,让我感觉它去实现一个 webapp 更加顺手好使。
        32
    ebingtel   6 天前
        33
    pythonee   6 天前
    @WildCat 现在 rails 有什么大发展吗
        34
    WildCat   6 天前
    @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 这么重要的东西怎能自动生成?)
        35
    WildCat   6 天前
    Django 最硬伤的一点是:没有优秀的测试最佳实践。
        36
    encro   4 天前
    Django 是开发商送的精装,
    Flask 是毛坯,
    框架就是地基,
    这两个地基都不错,
    都够你做成百层高楼了,
    至于选精装还是毛坯,
    看你定制需求高不高。
    楼上说 Django 没有测试最佳实践,这个是因为文档都没有看全吗?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   577 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 20:51 · PVG 04:51 · LAX 13:51 · JFK 16:51
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1