首页   注册   登录
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 · 150 天前 · 3300 次点击
    这是一个创建于 150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很多帖子问学哪个,打个比方,就好比房子,Flask 是给你地基你自己去建,Django 是给你个毛坯房,你自己去装修。

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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