Python HTTP 框架咨询 - 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
holy5pb
V2EX    Python

Python HTTP 框架咨询

  •  
  •   holy5pb 2022-11-04 11:51:41 +08:00 6189 次点击
    这是一个创建于 1072 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新人想问下,用 python 写 http 服务,tornado 和 flask 哪个好,有没有具体的优劣对比?或者有更好的 http 框架?

    47 条回复    2022-11-08 12:13:10 +08:00
    mimzy
        1
    mimzy  
       2022-11-04 11:59:55 +08:00   2
    新人请使用 Django ,你需要的东西几乎一定已经有了,用 Flask 最终也会堆成 Django 的样子。Tornado 现在似乎已经不怎么活跃了。不推荐用 FastAPI ,周边生态一般,作者最近一段时间没什么实质性更新。
    fgwmlhdkkkw
        2
    fgwmlhdkkkw  
       2022-11-04 12:05:03 +08:00
    flask 就挺好。
    holy5pb
        3
    holy5pb  
    OP
       2022-11-04 12:06:35 +08:00
    @mimzy 感谢老哥推荐,我去看看 Django
    thinkershare
        4
    thinkershare  
       2022-11-04 12:09:44 +08:00
    推荐你使用 Flask ,不要使用 Django , 要什么的时候再加。
    jdhao
        5
    jdhao  
       2022-11-04 12:23:28 +08:00 via Android   5
    fastAPI 感觉不错,配合 uvicorn 和 gunicorn
    mimzy
        6
    mimzy  
       2022-11-04 12:25:24 +08:00
    关于框架选择多说一句,用 Flask 的话,一开始会觉得哇很轻很简单,但初学者用着用着会发现我项目结构怎么组织?这个 g 是啥?怎么出来个 Blueprint ? Flask-SQLAlchemy 查东西为啥有个 session 写入还得 commit ?

    Django 的项目结构、ORM 、中间件几乎完全不需要用户操心,文档和第三方生态非常全面,甚至还附送了 Django admin 后台,在初级使用阶段完全没有心智负担。
    u2gign
        7
    u2gign  
       2022-11-04 12:27:56 +08:00
    确实像楼上说的 从 flask 转到 django 挺久了
    bytesfold
        8
    bytesfold  
       2022-11-04 13:09:28 +08:00
    小的用 flask ,大而全 Django
    warcraft1236
        9
    warcraft1236  
       2022-11-04 13:16:24 +08:00
    支持楼上说的,如果是个玩具,那 flask 随便搞搞,如果真的是要上线后期很长时间要维护的项目,还是无脑 Django 吧
    warcraft1236
        10
    warcraft1236  
       2022-11-04 13:16:59 +08:00
    顺便吐槽一句 Python 这种动态类型的语言,很难有好用的 ORM
    idblife
        11
    idblife  
       2022-11-04 13:24:48 +08:00
    无脑 django
    bing1178
        12
    bing1178  
       2022-11-04 13:43:44 +08:00   4
    fastapi
    raptor
        13
    raptor  
       2022-11-04 13:45:09 +08:00
    初学者建议还是 flask 入门吧,上来就 django 会压力比较大。
    chenqh
        14
    chenqh  
       2022-11-04 13:52:04 +08:00
    tornado 又不是不能用
    huangzhiyia
        15
    huangzhiyia  
       2022-11-04 13:53:10 +08:00 via Android
    看你需求,简单 api 调用或者玩具之类的用 flask 之类好上手的框架,复杂点请用 django 。

    不要图前期学习成本简单,对个人而言后期工程实践是个灾难。
    rust
        16
    rust  
       2022-11-04 13:55:18 +08:00
    Sanic 又不是不能用,和 Flask 一样简单,但是性能又高.不好吗
    rationa1cuzz
        17
    rationa1cuzz  
       2022-11-04 14:02:02 +08:00
    看实际情况,如果只是自己玩玩或者简单的增删改查的话 fastapi flask 都可以,上手非常容易;如果有复杂需求,比如复杂鉴权复杂业务等,无脑 Django 。fastapi flask 小而简单上手快,Django 重而全上手相对难。
    knightdf
        18
    knightdf  
       2022-11-04 14:02:48 +08:00
    老学者也建议 flask
    westoy
        19
    westoy  
       2022-11-04 14:05:06 +08:00   1
    其实 django 才是小而美, flask 才是大而全
    ipwx
        20
    ipwx  
       2022-11-04 14:17:23 +08:00
    FastAPI + Vue.js
    ipwx
        21
    ipwx  
       2022-11-04 14:18:02 +08:00
    @rationa1cuzz 但是 Django 和 JS 领域的 Vue.js 之类的放在一起用就几乎没有它的优势了。
    liuxingdeyu
        22
    liuxingdeyu  
       2022-11-04 14:22:37 +08:00
    Django 吧,结构明确,功能齐全,省心省力。flask 随着功能的增加会越来越笨重,坑还不少。还有个最关键的,俩框架的文档完全不在一个水平上
    raptor
        23
    raptor  
       2022-11-04 14:28:55 +08:00
    @rust sanic 现在能用了吗?早年试过坑很多,感觉还不如 fastapi 好用
    mickerwx
        24
    mickerwx  
       2022-11-04 14:31:29 +08:00
    简单总结 大项目 有架构有规划 上 flask 小项目 个人项目啥的 django
    penzi
        25
    penzi  
       2022-11-04 14:37:02 +08:00
    最好的框架就是别用 Python
    Rebely
        26
    Rebely  
       2022-11-04 14:40:52 +08:00
    @raptor sanic 现在完全没有必要用,而且就是不如 fastapi 好用, flask 已经支持异步视图了,flask 衍生框架 quart 也不错. 对比起来 sanic 没有任何优势
    ppd0705
        27
    ppd0705  
       2022-11-04 14:45:12 +08:00
    fastapi
    Courstick
        28
    Courstick  
       2022-11-04 14:49:04 +08:00
    不建议 tornado 同一楼理由 遇到问题查找解决方案比较困难,flask 和 django 的话个人认为没有突出的优劣之分,django 有的功能 flask 基本都能找到趁手的第三方库
    arischow
        29
    arischow  
       2022-11-04 14:57:14 +08:00
    Tornado 和 Flask 的话我选后者,因为我熟悉

    但是你能问出这样的问题,我推荐 Django ,我也用 Django
    YSMAN
        30
    YSMAN  
       2022-11-04 15:04:51 +08:00
    无所谓 何必纠结于 框架呢, 都差不多的
    xavierskip
        31
    xavierskip  
       2022-11-04 15:38:54 +08:00
    推荐你使用 Django ,知道自己要啥的时候用 Flask 。

    新手用着用着还是会把 Flask 拼成一个 Django 。
    exiaohao
        32
    exiaohao  
       2022-11-04 15:53:11 +08:00
    可以分三组对比:
    - Flask 、Hug
    - Django
    - Tornado
    理解下差异吧
    SenLief
        33
    SenLief  
       2022-11-04 16:16:10 +08:00
    前期的框架应该推荐 django ,没有选择困难症,同时有比较好的项目组织,flask 各个组件的关系前期学的时候一脸懵逼,你都不知道文件应该放在哪合适。等把项目组织弄回了,框架就随意了。
    LindsayZhou
        34
    LindsayZhou  
       2022-11-04 16:48:56 +08:00
    @liuxingdeyu #22 文档确实不在一个水平上,Django 把文档过一遍的功夫,我能把 Flask 的源码读上七八遍了。
    本来想看一下 Django 的,两千七百多页的 pdf 文档把我劝退了。
    nyakoy
        35
    nyakoy  
       2022-11-04 18:33:24 +08:00
    不推荐 django ,太重,很多你用不到的功能都自带。自带的 orm 光迁移问题就可以劝退我 80 次。flask 和 fastapi 小并且灵活,用到什么就加什么组件,我几个线上项目用的 flask ,最近新项目用的都是 fastapi ,没啥问题。
    B1acKy1in
        36
    B1acKy1in  
       2022-11-04 18:45:40 +08:00
    fast api 属实新人不友好
    nomagick
        37
    nomagick  
       2022-11-04 19:05:19 +08:00
    Fastapi 和 Java 那边的 Spring cloud 是第一梯队,声明式编程,Dto

    Flask 之流,和 Go, 一般的 Node.js 是第二梯队, 异步加持, 主要是做 API 服务,但代码组织没搞好,到处都是参数验证

    Django ,和 ROR ,PHP ,第三梯队,传统 MVC 框架,渲染 HTML ,准备扫进历史的垃圾堆
    inframe
        38
    inframe  
       2022-11-04 21:56:08 +08:00
    项目里用过 flask ,tornado ,django ,fastapi
    不管最初怎么样,小项目无所谓随便搞,web 框架写到后面系统就会越来越像 django 类似的东西

    因为工程实践最后走的都是这几条路,
    没有好坏,只有合不合适
    GlobalNPC
        39
    GlobalNPC  
       2022-11-04 22:03:08 +08:00
    当然是 sanic !
    lucays
        40
    lucays  
       2022-11-04 22:16:17 +08:00
    要么 django 要么 fast api
    新手上前面的,啥都有
    kafeisemang
        41
    kafeisemang  
       2022-11-04 22:19:35 +08:00
    @nomagick django 也能做前后端分离啊,drf 框架开发速度挺快的
    fy
        42
    fy  
       2022-11-04 22:30:36 +08:00 via Android
    @mimzy 用 fastapi 或 Django ,flask 已经算是沉寂了
    cxxnullptr
        43
    cxxnullptr  
       2022-11-04 22:42:38 +08:00
    flask 用着最舒服
    chuanqirenwu
        44
    chuanqirenwu  
       2022-11-05 11:55:56 +08:00   1
    建议用 go
    CzaOrz
        45
    CzaOrz  
       2022-11-05 14:12:34 +08:00
    只是学习的话可以玩玩我这个 https://github.com/czasg/pywss

    做正式项目的话,推荐 Flask 和 Django 都学,至少我待过的几家公司基本都用这两...
    shaoxyz
        46
    shaoxyz  
       2022-11-06 01:11:00 +08:00
    @nyakoy 像迁移、自带的 APP 和中间件,很多(几乎全部)都是可以不用(删掉)的。当然前提是要搞明白 Django 的设计思想,仔细看文档。
    下面摘自官方文档里的原文:
    ```
    写给极简主义者

    就像之前说的,为了方便大多数项目,我们默认激活了一些应用,但并不是每个人都需要它们。如果你不需要某个或某些应用,你可以在运行 migrate 前毫无顾虑地从 INSTALLED_APPS 里注释或者删除掉它们。migrate 命令只会为在 INSTALLED_APPS 里声明了的应用进行数据库迁移。
    ```
    rust
        47
    rust  
       2022-11-08 12:13:10 +08:00
    @raptor 我们用在生产环境,爽得一批~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1863 人在线   最高录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:13 PVG 00:13 LAX 09:13 JFK 12:13
    Do have faith in what you're doing.
    ubao 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