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 · 5723 次点击
    这是一个创建于 781 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新人想问下,用 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
    maggch97
        25
    maggch97  
       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 类似的东西

    因为工程实践最后走的都是这几条路,
    没有好坏,只有合不合适😉
    infun
        39
    infun  
       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   ·   实用小工具   ·   2977 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:57 · PVG 21:57 · LAX 05:57 · JFK 08:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.