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
xz
V2EX  ›  Python

Python 的 web 框架哪个好呢

  •  
  •   xz · 2016-12-05 16:08:55 +08:00 · 6424 次点击
    这是一个创建于 2945 天前的主题,其中的信息可能已经有所发展或是发生改变。
    web.py flask tornado Django 自己玩的小项目选哪个呢
    83 条回复    2016-12-08 21:15:29 +08:00
    mansur
        1
    mansur  
       2016-12-05 16:22:37 +08:00
    django
    gogohigh
        2
    gogohigh  
       2016-12-05 16:29:44 +08:00
    tornado
    icedx
        3
    icedx  
       2016-12-05 16:30:01 +08:00 via Android   ❤️ 3
    Flask 不服憋着
    ipconfiger
        4
    ipconfiger  
       2016-12-05 16:31:32 +08:00
    引战贴, 火钳流明
    winniesi
        5
    winniesi  
       2016-12-05 16:31:39 +08:00
    前三楼齐了,看你怎么选
    Kilerd
        6
    Kilerd  
       2016-12-05 16:33:12 +08:00 via iPhone   ❤️ 2
    我选 Flask ,不服就自己想到服。
    lairdnote
        7
    lairdnote  
       2016-12-05 16:34:00 +08:00   ❤️ 1
    flask
    hack
        8
    hack  
       2016-12-05 16:53:04 +08:00   ❤️ 1
    flask+1
    Mandown
        9
    Mandown  
       2016-12-05 16:55:40 +08:00 via Android
    凑热闹 web.py
    可惜没再更新了
    yrq110
        10
    yrq110  
       2016-12-05 16:56:16 +08:00 via iPhone
    flask
    pimin
        11
    pimin  
       2016-12-05 16:57:12 +08:00 via Android
    uliweb💣
    sensui7
        12
    sensui7  
       2016-12-05 17:36:32 +08:00 via iPhone
    php ,还有谁不服
    geek123
        13
    geek123  
       2016-12-05 17:54:08 +08:00   ❤️ 1
    小项目还是 flask 吧。
    qweweretrt515
        14
    qweweretrt515  
       2016-12-05 17:55:02 +08:00
    django
    qweweretrt515
        15
    qweweretrt515  
       2016-12-05 17:55:38 +08:00
    django +1
    smallaccount
        16
    smallaccount  
       2016-12-05 17:56:36 +08:00   ❤️ 1
    Flask
    imcocc
        17
    imcocc  
       2016-12-05 18:02:24 +08:00 via iPhone
    bottle
    有人用过没
    ruter8
        18
    ruter8  
       2016-12-05 18:11:53 +08:00   ❤️ 1
    目前用过 Django 和 Flask , Django 算是一步到位吧, Flask 可以各种扩展。看你需求来选吧,只是做一个 RESTful API 的话,用 Flask 就够了,要做大一些的项目, Django 功能更齐全。
    xrlin
        19
    xrlin  
       2016-12-05 18:13:15 +08:00 via iPhone
    Django ,大而全
    tumbzzc
        20
    tumbzzc  
       2016-12-05 18:25:47 +08:00 via iPhone   ❤️ 1
    Flask+1
    misaka19000
        21
    misaka19000  
       2016-12-05 18:44:25 +08:00 via Android
    PHP +1
    yjmade
        22
    yjmade  
       2016-12-05 18:52:52 +08:00
    odoo
    28ms
        23
    28ms  
       2016-12-05 18:56:33 +08:00 via iPhone
    django 套路熟悉了之后非常方便, admin 模块不容小视。
    anjunecha
        24
    anjunecha  
       2016-12-05 19:05:11 +08:00 via iPhone
    严肃点做就 tornado
    ke1e
        25
    ke1e  
       2016-12-05 19:21:19 +08:00 via Android   ❤️ 1
    Flask 爱咋咋地
    tumbzzc
        26
    tumbzzc  
       2016-12-05 19:22:26 +08:00
    @misaka19000 R U Serious ? PHP ?
    chaichaichai
        27
    chaichaichai  
       2016-12-05 19:52:42 +08:00
    tornado
    NaVient
        28
    NaVient  
       2016-12-05 19:53:12 +08:00   ❤️ 1
    我用 flask 加扩展到最后都怀疑自己用的是 django 手动滑稽
    keysona
        29
    keysona  
       2016-12-05 20:04:48 +08:00
    django 大而全。

    flask 小而精。

    说真的, flask 可以学到很多东西。
    之后,用 django 可以节省很多时间。

    所以,学习的话 flask 入手。

    反正前三楼说的都要学。
    FindHao
        30
    FindHao  
       2016-12-05 20:05:37 +08:00 via Android
    习惯了 tornado
    windfarer
        31
    windfarer  
       2016-12-05 20:07:17 +08:00 via Android
    aiohttp.web
    jimzhong
        32
    jimzhong  
       2016-12-05 20:23:14 +08:00
    看你的需求,小项目有多小?
    Django 五脏俱全, Flask 需要很多第三方扩展。
    zhuangzhuang1988
        33
    zhuangzhuang1988  
       2016-12-05 20:33:32 +08:00
    django .. 别作死用别的。。
    tonghuashuai
        34
    tonghuashuai  
       2016-12-05 20:38:01 +08:00   ❤️ 1
    我还是推荐 Tornado

    Flask 一直说自己很优雅,但是我觉得很多地方用起来并不优雅,举几个例子:
    主要觉得不好的地方在于 view 是使用函数实现而不是类
    1. 在一个函数里面如果要同事处理 get 和 post 请求,就要使用 if 判断,
    if request.method == 'POST':
    pass
    elif request.method == 'GET':
    pass

    这很明显不够优雅啊,应该分开处理啊, Tornado 用类来实现 view GET 和 POST 分别用不同的函数处理,多么好啊。

    2. 就是 before_request 的方式
    如果想实现访问鉴权的话,写到 app.before_request 装饰的函数里,但是他是全局的,如果一些 view 不需要鉴权,那又得 if 判断了, blueprint 也有 before_request ,但是写起来总是不够方便,而 Tornado 就可以用多重继承, Mixin 等方式,很方便啊

    3. 就是在 view 嵌套函数
    嵌套函数倒没什么问题,但是大量使用的话总觉得不够优雅吧,类方法才够优雅啊

    当然,上面的疑问也可能是我对 flask 不够了解导致,如果又更好的实现,欢迎大家讨论。
    xrlin
        35
    xrlin  
       2016-12-05 20:46:33 +08:00
    @NaVient 手动滑稽,我当初用 flask 的时候也有同感
    dtfm
        36
    dtfm  
       2016-12-05 20:46:46 +08:00
    @tonghuashuai before_request 这种钩子不方便么?能举个小例子说明一下 Tornado 怎么处理的么,我也一直觉得 Flask 有的地方处理蛮繁琐的,但又没有接触过其他框架,所以无从比较。
    leyle
        37
    leyle  
       2016-12-05 20:53:14 +08:00
    @dtfm 我鉴权写个装饰器挂在 get post put 之类的方法上上面即可。
    northisland
        38
    northisland  
       2016-12-05 20:53:25 +08:00
    tornado 有出版的教程,纯新手适合
    loryyang
        39
    loryyang  
       2016-12-05 20:57:21 +08:00
    新手 flask ,上手很快,到后面了, django 其实也挺好的
    tonghuashuai
        40
    tonghuashuai  
       2016-12-05 21:02:15 +08:00
    @dtfm
    Tornado 就可以用多重继承, Mixin 等方式
    @leyle
    装饰器方式鉴权确实是一种方式,但是我考虑倒一种场景:
    如果绝大多数 view 都需要鉴权,而不需要鉴权的就几个(比如后台系统,一般只有注册和登录不需要鉴权),那这个装饰器是不是就不太好了,而 Tornado 只需要为少数不需要鉴权的 view 实现个基类就好了,而不需要去处理大多数
    lazywen
        41
    lazywen  
       2016-12-05 21:14:01 +08:00
    @yjmade 就猜到又是你😂
    lazywen
        42
    lazywen  
       2016-12-05 21:15:03 +08:00
    必须 Django 哇
    keysona
        43
    keysona  
       2016-12-05 21:17:20 +08:00
    @tonghuashuai

    关于优雅的处理 get , post 方法。可以使用 MethodView 。

    至于后台网站那种大部分都要鉴权的,可以自己实现 View 类,和 tornado 差不多。
    wellsc
        44
    wellsc  
       2016-12-05 21:22:06 +08:00
    @yjmade 奇葩
    cczy
        45
    cczy  
       2016-12-05 21:47:10 +08:00
    php
    ayiis
        46
    ayiis  
       2016-12-05 21:54:00 +08:00
    用 tornado 就要有一切向异步看齐的准备,再选其他涉及到 IO 操作的包时就疼了
    freestyle
        47
    freestyle  
       2016-12-05 22:11:36 +08:00 via iPhone
    Django
    alvie
        48
    alvie  
       2016-12-05 22:18:02 +08:00
    @tonghuashuai django 也能用 Mixin 模式
    alvie
        49
    alvie  
       2016-12-05 22:19:26 +08:00
    熟悉哪个用哪个。都不熟悉用 Django ,文档齐全,使用方便。
    aaronzjw
        50
    aaronzjw  
       2016-12-05 22:25:57 +08:00
    Flask or Django
    honmaple
        51
    honmaple  
       2016-12-05 22:27:29 +08:00   ❤️ 1
    @tonghuashuai flask 实现很简单啊,使用 MethodView 优雅的处理 get,post,put,delete,继承 MethodView 写一个公共的基类,用 decorators = ()代替 before_request ,不需要鉴权的继承原有的 MethodView

    ps:一直想不通 flask-restful 有什么用,原生 flask 已自带 MethodView
    honmaple
        52
    honmaple  
       2016-12-05 22:34:03 +08:00
    小项目用 flask,大的 django,tornado 没用过不清楚,听说性能最好
    sensui7
        53
    sensui7  
       2016-12-05 22:56:38 +08:00 via iPhone
    @tonghuashuai 如果是这样的话...我感觉 symfony 的路由组件很强大,同时也足够优雅了
    daiv
        54
    daiv  
       2016-12-05 23:01:19 +08:00
    django 可以节省时间,所以我也准备从 web.py 转过来
    kxxoling
        55
    kxxoling  
       2016-12-05 23:48:08 +08:00
    Hug +1
    maomaomao001
        56
    maomaomao001  
       2016-12-05 23:55:18 +08:00 via Android
    nodejs express ....
    hugo775128583
        57
    hugo775128583  
       2016-12-06 00:13:26 +08:00 via Android
    @sensui7 php 都成 python 框架了 hhh ,这是 php 被黑的最惨的一次
    tonghuashuai
        58
    tonghuashuai  
       2016-12-06 03:38:28 +08:00 via Android
    @honmaple
    @keysona
    感谢两位,我明天看下 MethodView
    zzlettle
        59
    zzlettle  
       2016-12-06 06:01:52 +08:00
    自己玩小项目当然选 django ,主要是做项目快。什么都给你集成好了、
    有想学 django 的朋友,可以看我这个贴
    https://www.v2ex.com/t/284762
    szx9231
        60
    szx9231  
       2016-12-06 08:06:14 +08:00 via iPhone
    其实用 nodejs 也挺不错的
    miketeam
        61
    miketeam  
       2016-12-06 08:13:04 +08:00 via iPhone
    必须 dj 啊
    lrh3321
        62
    lrh3321  
       2016-12-06 09:01:12 +08:00
    Flask + 1
    Ahri
        63
    Ahri  
       2016-12-06 09:16:23 +08:00
    Flask: Vine, Netflix, Reddit, Lyft
    Django: Instagram, Pinterest, Coursera

    Actually, it does not matter. Companies heavily modify web frameworks to suit their needs.
    doubleflower
        64
    doubleflower  
       2016-12-06 09:28:16 +08:00
    相比 flask , django 集成的 db 层是最大优势
    ryd994
        65
    ryd994  
       2016-12-06 09:37:12 +08:00
    @tonghuashuai GET POST 可以的啊
    @app.route('/', methods=['GET'])
    @app.route('/', methods=['POST'])
    两个函数名不一样就行
    我经常这么用
    raptor
        66
    raptor  
       2016-12-06 09:52:54 +08:00
    bottle +1
    相当于光杆的 flask ,做 RESTful 性能比 flask 好( flask 多了一层 werkzeug )。当然要做更多的功能就略不方便了,毕竟没有 flask 那么多现成的扩展。
    introom
        67
    introom  
       2016-12-06 09:56:10 +08:00
    自己用了就知道了。
    jkm
        68
    jkm  
       2016-12-06 11:14:58 +08:00
    有用 pylons (pyramid)框架的童鞋么?
    jkm
        69
    jkm  
       2016-12-06 11:15:29 +08:00
    @Ahri No, reddit use pylons (pyramid)
    8e47e42
        70
    8e47e42  
       2016-12-06 11:22:53 +08:00
    Django 妥妥的,性能基本上不用管,自己玩的小项目做的出来才的基础上比较安全才是王道,性能什么的等你到了纠结的份上直接扩 VPS 就好了。我 VPS 一个月扩个 70 刀的方案性能高的不要不要的了,但是如果你一样的情况下找码农帮你优化代码,不到 500 人民币你应该就请的到学生。所以先别来纠结性能,易用性才是王道
    grzhan
        71
    grzhan  
       2016-12-06 11:28:23 +08:00
    最近的项目在用 Hug , 然后配 Pony ORM
    基于 Python3 (支持 Type annotation ),作为新的微框架感觉设计上相对于 Flask 更符合直觉。
    嗯嗯,所以我推荐 Flask (。
    ruter8
        72
    ruter8  
       2016-12-06 11:35:27 +08:00
    @NaVient 同感。我朋友也一直吐槽,说装那么多扩展之后,这不就是 Django 了吗,那不如一开始就用 Django 哈哈哈哈。感觉也是应用场景的问题吧,一开始可以预见需要大量扩展才能完成的,那肯定不是什么小的项目了,肯定会优先考虑 Flask 之外的框架的。
    Mark24
        73
    Mark24  
       2016-12-06 11:41:48 +08:00
    Django 文档阔以

    现在觉得开源项目,无论本身技术多牛,传播的时候,对于用户和第三方开发者都是黑盒,文档所描述和暴露的功能,直接决定它对于用户的价值。如果文档为 0 ,那么价值也不会高到哪里去。

    文档===价值

    Django 文档不错

    其他没研究过,下次去膜拜膜拜
    nicevar
        74
    nicevar  
       2016-12-06 12:25:02 +08:00
    自己做小项目 Django 挺好的,不知道现在什么版本了, 1.5-1.6 版本玩过,做了个小的音乐后台管理,后来转 java 了
    Gem
        75
    Gem  
       2016-12-06 14:23:25 +08:00
    @grzhan 这个框架看了下文档,真的很符合直觉,代码即文档。在使用过程中,坑多吗?有没有成熟的使用案例?
    xvx
        76
    xvx  
       2016-12-06 14:28:54 +08:00 via iPhone
    LZ 应该没使用过这些框架吧,如果接触过的话,就不会问了。
    其实都有坑,没有哪个是完美的。
    flask 和 Django 的网络文档比较齐全,我也用这两个,不过都有很多坑,哪怕你是对着文档敲的代码,你也会遇到各式各样的奇葩问题。
    Jackeriss
        77
    Jackeriss  
       2016-12-06 14:30:44 +08:00
    每个框架都有它的特点和存在的价值,个人喜欢 Tornado 和 Flask 。为什么推荐 Tornado 的人这么少?
    fabregaszy
        78
    fabregaszy  
       2016-12-06 14:38:03 +08:00
    用的是个冷门的: falcon
    Jackeriss
        79
    Jackeriss  
       2016-12-06 14:41:42 +08:00
    @yjmade 你是认真的?
    grzhan
        80
    grzhan  
       2016-12-06 15:24:15 +08:00   ❤️ 1
    @Gem 用的时候感觉项目文档太少所以比较担心。

    目前遇到过的问题是缺乏对于 auto-reload 的支持( https://github.com/timothycrosley/hug/issues/43 ),以及写文件上传业务时候碰到过一个也是近版本才修复的一个 issue ( https://github.com/timothycrosley/hug/issues/329 )。

    是用来写的内部系统,因为后端比较薄,所以扩展之类写得很少。

    总体开发的个人体验还是比 Flask 好一些的,建议一些个人项目可以玩票尝试一下。
    lalalakakaka
        81
    lalalakakaka  
       2016-12-06 21:35:48 +08:00
    个人开发者,刚交差一个项目,换了 flask/django/bottle 三个框架
    开始用的 flask
    发现要装的插件有点多,而且目标环境里有个库正好依赖 django
    于是换了 django (从头学习的)
    发现 django 要配的配置文件有点多,写起来好麻烦~而且我不喜欢 django 的数据层和模版层
    刚好反思了下项目不涉及大量数据库操作,甚至可以不需要数据库,简化了设计架构后
    直接转了 bottle ,当 RESTful 服务器
    后来有 websocket 需求,而 WSGI 类的 python 框架在这方面非常弱,于是想转 tornado
    正准备开 git 分支时抽了自己巴掌,做什么死啊,你是做项目还是做调研?
    就这么 bottle 交差了


    回想起来,还是 flask 舒服。可能学会 django 后会更安逸些,但是实在受不了 django 自带全家老小式的配置文件,时时刻刻需要看文档,不然就进坑里了。而 flask 和 bottle 这类东西,框架本身替你完成的工作不多,反而改配置的思维负担小了很多。而且 jinja 、 sqlalchemy 这种东西不止做 flask 用,在其他地方也用的到,学到等于赚到。
    至于 bottle 在极端需要可部署性的情况下还是很美好的,毕竟单文件。
    yjmade
        82
    yjmade  
       2016-12-07 01:18:46 +08:00
    @Jackeriss 用了 3 年了,从 7 到现在的 10
    sensui7
        83
    sensui7  
       2016-12-08 21:15:29 +08:00
    @tonghuashuai
    1. 在一个函数里面如果要同事处理 get 和 post 请求,就要使用 if 判断,
    为什么要用一个函数处理呢?

    2. 就是 before_request 的方式
    抽象程度不够, 不应该在 before_request 里直接处理 view , 可以定义一个请求处理器,除了决定是否可以鉴权, 还可以决定是否不需要控制器, 是否不需要 view , 等等各种操作。
    3. 就是在 view 嵌套函数
    嵌套函数倒没什么问题,但是大量使用的话总觉得不够优雅吧,类方法才够优雅啊,
    此条不懂。

    注: 以上都是我胡扯的, 我根本不会 python , - -。 这些是 symfony httpKernel 组件的做法。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1408 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:28 · PVG 01:28 · LAX 09:28 · JFK 12:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.