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

Python web 几大框架那种适合新手? dalao 来发表下自己的高见

  •  2
     
  •   1500176279 · 2018-03-30 11:43:10 +08:00 via Android · 10493 次点击
    这是一个创建于 2465 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,花了一段时间学习基础语法,以及一些相关知识,现在想用更上一层楼!
    第 1 条附言  ·  2018-03-31 01:04:38 +08:00
    感谢各位的意见,以上论坛 62 条提示!谢谢
    56 条回复    2018-04-23 17:53:40 +08:00
    qs
        1
    qs  
       2018-03-30 11:44:24 +08:00
    flask 知名度高的前提下 使用更简单
    forthdim
        2
    forthdim  
       2018-03-30 11:48:55 +08:00
    flask 呗,简单易用
    pimin
        3
    pimin  
       2018-03-30 11:50:21 +08:00 via Android
    flask 上手快一些
    WilliamLin
        4
    WilliamLin  
       2018-03-30 11:54:54 +08:00
    flask 或 django
    xpresslink
        5
    xpresslink  
       2018-03-30 11:58:39 +08:00   ❤️ 1
    看你的需求和你本身对 python 语言基础。
    如果你的 python 语言基础也是小白又想马上撸出来点东西,主要是以内容展示为主的项目,那么选 Django。
    如果你的 pthon 基础不错,想做某种服务后端,以 api 为主,需要比较大的灵活度,那么选 flask
    fanhaipeng0403
        6
    fanhaipeng0403  
       2018-03-30 12:14:05 +08:00
    flask
    rogwan
        7
    rogwan  
       2018-03-30 12:14:57 +08:00 via Android
    以为有很多框架可选,其实也就 flask 和 django。其他的要么太老,要么太新,要么太小,要么太大。
    SuperMild
        8
    SuperMild  
       2018-03-30 12:17:40 +08:00
    flask,用来做小项目真的很爽
    SlipStupig
        9
    SlipStupig  
       2018-03-30 12:24:45 +08:00   ❤️ 1
    难道不是 tornado,性能好,轻量化,我从 3.0 用到现在 5.0.....
    lixuda
        10
    lixuda  
       2018-03-30 12:25:58 +08:00
    @SlipStupig 方便吗
    SlipStupig
        11
    SlipStupig  
       2018-03-30 12:28:32 +08:00
    @lixuda 非常方便,文档齐全,更新迅速,大型开发也不成问题.
    详情见官方文档: http://www.tornadoweb.org/en/stable/
    vimiix
        12
    vimiix  
       2018-03-30 12:42:22 +08:00   ❤️ 1
    入门 flask->进阶 django->高手 flask
    vimiix
        13
    vimiix  
       2018-03-30 12:44:03 +08:00
    flask 就是 Dota 里的 SF,农药里的妲己 ,😄
    wspsxing
        14
    wspsxing  
       2018-03-30 12:44:07 +08:00
    flask 微框架,
    django 大而全的框架,
    sanic 性能好,
    初学者前两个随便选一个就行,另外 tornado 的时代已经过去了。
    Marmot
        15
    Marmot  
       2018-03-30 12:44:32 +08:00
    楼上+1
    xpresslink
        16
    xpresslink  
       2018-03-30 12:46:32 +08:00
    @SlipStupig 我觉得 tornado 的异步网络框架是很强大,非常适合做高并发应用后端。做 web 框架就有点功能上不完善了,特别是异步回调模式不是一般小白能很快上手写代码的,老手都头疼,要是我宁愿用 gevent。
    lauix
        17
    lauix  
       2018-03-30 14:15:11 +08:00
    flask 优化后,比 tornado 并发更高。
    fy
        18
    fy  
       2018-03-30 14:56:17 +08:00
    flask 文档好容易上手。
    tornado 不错但是缺少一些常用的辅助功能。
    不过现在毕竟是前后端分离的时代了,不要模板的话像是 apistar 这种框架也不妨看看。
    另外我以前是 tornado 老用户了,造了一个轮子: https://github.com/fy0/fpage


    @xpresslink #16 异步使用 python3
    mingzizhi
        19
    mingzizhi  
       2018-03-30 14:58:44 +08:00
    flask 确实很方便,我也刚弄 Python,就用的 flask,易学,简单,文档也 OK
    Hopetree
        20
    Hopetree  
       2018-03-30 15:06:59 +08:00
    @vimiix 草丛婊???
    ipwx
        21
    ipwx  
       2018-03-30 15:09:00 +08:00
    @SlipStupig Tornado 性能确实不错,但是建立在你本身 Python 已经很厉害的基础上。如果是新手,还是老老实实用 Flask 或者 Django 吧。
    welkinzh
        22
    welkinzh  
       2018-03-30 15:36:28 +08:00
    flask 入门很快, 接下来可以 django,其实主流也就这两个了
    vimiix
        23
    vimiix  
       2018-03-30 15:39:29 +08:00
    @Hopetree 你知道的有点多
    rogwan
        24
    rogwan  
       2018-03-30 16:10:01 +08:00 via Android   ❤️ 1
    @lauix 优化算上 uwsgi/gunicorn 吗?还是优化 flask 本身模块(除了把阻塞任务用 thread 或队列之外,还没怎么优化过其他功能啦)?
    lauix
        25
    lauix  
       2018-03-30 16:20:12 +08:00   ❤️ 1
    @rogwan

    gunicorn 启动是必须的

    主要还是 gevent + flask 变成协程 ( 加上 gevent 不比 tornado 差,最重要的是不用写 yeid )

    celery + redis 作为异步队列

    基本就搞定了

    本身模块看需求了
    baojiwei
        26
    baojiwei  
       2018-03-30 16:44:27 +08:00
    2020 就不支持 python2 了,为什么不果断的坐上 python3 的船。当然是 sanic。
    wongskay
        27
    wongskay  
       2018-03-30 16:53:20 +08:00
    flask
    YingJie
        28
    YingJie  
       2018-03-30 17:10:32 +08:00 via Android
    没有用 bottle 的吗
    l1093178
        29
    l1093178  
       2018-03-30 17:14:37 +08:00
    新手用 Django,文档很详细,各种 web 开发的坑和最佳实践也写得很清楚了,照着做基本上不会有问题
    一上来就用 Flask 的真的不怕被坑?
    mywaiting
        30
    mywaiting  
       2018-03-30 17:14:41 +08:00   ❤️ 1
    感觉 python 的框架都是哲学问题,没有对错,找个框架入门好了~

    flask 上手快,插件多,但是随着项目的深入,慢慢就是变成一个 django,绝对的
    django 一上来就是大而全,但胜在什么都有,什么都不用自己折腾

    tornado 这货从一出生就开始用到现在,没有啥好也没啥不好,就是用习惯了。flask 的上手快是以各种插件为代价的,模板你要去找 jinja 吧? orm 要找 sqlachemy 吧?这些都需要你自己去熟悉一下

    而且,各种用 flask 和 django 的同学可能忽略了一个基本是事实就是,如果你有工作需要深入到源代码的话,那么 tornado 是一个极好的参考。django 的代码体系复杂而且庞大我就不说了,看 flask 的代码底层还要考虑 Werkzeug,其基于全局变量的 context 处理起来其实也不容易的。

    顺便的,部署 tornado 的项目可以少拖一个 gunicorn 或者 uwsgi 之如此类,少很多坑

    上面那些提及到性能的同学,完全没有必要进行对比。在 pypy/aiohttp/uvloop 的加持下,不是我非要针对谁,你们说的性能都是垃圾。
    mywaiting
        31
    mywaiting  
       2018-03-30 17:19:59 +08:00
    关于性能,补充一点:

    在 pypy/asyncio/uvloop 的加持下,不是我针对谁,包括你们认为的 NodeJS、GoLang、Gevent 啥的,都是垃圾

    有感觉我会被 NodeJS\GoLang 的同学过来喷死,就不说了~

    PHP 才是世界上最好的语言!
    rogwan
        32
    rogwan  
       2018-03-30 17:24:03 +08:00 via Android
    @mywaiting flask 的 context 确实有点魔术方法,django 里不是也有 CONTEXT_PROCESSORS,是类似的吗?
    sciooga
        33
    sciooga  
       2018-03-30 18:29:46 +08:00
    Tornado 省心很多啊
    bucky
        34
    bucky  
       2018-03-30 18:51:56 +08:00
    不推荐 flask 入门,入门重要的是要有一个蓝图,flask 是对后台开发蓝图清楚的人用的,推荐 django, 学了 django 然后又需要可以翻过来学 flask
    mywaiting
        35
    mywaiting  
       2018-03-30 22:10:09 +08:00   ❤️ 2
    @rogwan #32 django 的 context_processors 只是 template 的全局变量吧,跟 flask 不是一个概念的 context

    flask 的 context 分为 App context (_app_ctx_stack) 和 Request context (_request_ctx_stack),理解好这两个概念就是 flask 的关键。flask 基于 werkzeug 的 LocalStack 实现了很精巧的 应用(app) 和 请求(request) 的 context,像 flask g 这样的全局变量好用是好用,要是你想问个为什么,恐怕没有几个自认为懂得 flask 的人答得出来

    因为懂得 flask 背后的原理,我反而觉得 tornado 这样的用 class 来构建 context 的框架更加方便理解,至少跟别人解释起来,真心比 flask 这背后的 LocalProxy 好理解~
    hellolex
        36
    hellolex  
       2018-03-30 22:40:05 +08:00
    @YingJie 用 bottle 写过一个应用后端,非常喜欢这个框架,小巧方便
    wzw
        37
    wzw  
       2018-03-30 23:39:28 +08:00 via iPhone
    @bucky #34 蓝图好用
    simpleapples
        38
    simpleapples  
       2018-03-30 23:52:45 +08:00
    我用 flask 做过一些项目,觉得 flask 的设计是非常精妙的,既可以用来做小项目,也可以使用蓝图,引入各种扩展来用来做大项目。从代码角度来说,也适合由浅入深的学习,可以通过它了解“什么是一个 web 框架”,也可以深入到源码中,理解其 context 的设计原理。

    既然楼主是新手,建议随便找一个框架( django、flask、tornado )深入理解,然后再对比着学习另外两种,选择上不用太纠结,反正都不了解,那就随便找一个了解好了。
    ihuzhou
        39
    ihuzhou  
       2018-03-31 00:01:56 +08:00
    最近有个任务就折腾了下 flask 和 django,个人体会 django 比 flask 稍微好一点,flask 精简,django 全面直接有登录后台权限系统,用起来十分方便。
    xpresslink
        40
    xpresslink  
       2018-03-31 00:31:50 +08:00
    @YingJie 这个以前还真用过写一些运维小工具接口什么的。本质上 flask 就是从 bottle fork 出来的那个装饰器路由方式完全一样。就是因为 flask 作者当年想让 bottle 作者加功能,但是 bottle 作者就是想保持一个文件的框架不同意改,于另起炉子了。不信你拿 bottle 那个 hello world 用 flask 来跑都不用改。
    rogwan
        41
    rogwan  
       2018-03-31 00:32:32 +08:00 via Android
    @mywaiting 明白,就是说 django 大包大揽,自产自销,用不着 App context 这样的可拔插设计(把 flask 的 app.app_context().push()理解成可拔插设计),可以这样理解吗?
    swulling
        42
    swulling  
       2018-03-31 00:51:41 +08:00 via iPhone
    django 适合新手,成熟方便
    flask 有一定经验的,灵活易用
    tornado 适合看代码学习……写的很赞
    lalalakakaka
        43
    lalalakakaka  
       2018-03-31 01:17:53 +08:00
    推荐 bottle。麻雀虽小五脏俱全,不用折腾插件~

    学会 bottle 再转 flask 也不迟
    Linxing
        44
    Linxing  
       2018-03-31 01:50:45 +08:00
    必须是 Flask 写接口真的是杠杆的
    jjx
        45
    jjx  
       2018-03-31 06:23:07 +08:00
    一直在用 bottle+gevent

    对于只提供 api 而言 flask 也很重
    conn4575
        46
    conn4575  
       2018-03-31 08:14:37 +08:00 via Android   ❤️ 1
    如果你有其他语言成熟 web 框架经验的话,推荐 flask,否则请使用 django,我已经看过太多新手用 flask 入手,然后写出来的项目代码结构不堪入目的…
    WinMain
        47
    WinMain  
       2018-03-31 10:02:15 +08:00
    前段时间临时搞一个 web 项目,简单学了下,用的 nginx+gunicorn+gevent+flask+celery,感觉挺好用,一天就上手。。
    fyxtc
        48
    fyxtc  
       2018-03-31 10:29:51 +08:00
    @fy 哥们,眼熟你,你的 id 事名字缩写吗,我的是 fyx....哈哈哈哈
    fy
        49
    fy  
       2018-03-31 16:12:07 +08:00
    @fyxtc #48 没错 2333
    jimi2018
        50
    jimi2018  
       2018-03-31 17:34:10 +08:00
    flask 不错,推荐个 flask 入门的教程:

    http://xc.hubwiz.com/course/562427361bc20c980538e26f?affid=20180331v2ex
    creedowl
        51
    creedowl  
       2018-03-31 18:10:40 +08:00
    有人用 aiohttp 嘛
    vipppppp
        52
    vipppppp  
       2018-04-02 17:55:20 +08:00
    作为一个新手,学了 3 个月 python,然后自己看视频和看资料学习 django
    然后现在在刚刚入职一个月,在做 flask。。。。。
    Jaymiii
        53
    Jaymiii  
       2018-04-03 09:56:44 +08:00   ❤️ 1
    @vipppppp 求问您主要掌握了什么 python 知识,您是计算机专业的吗,应届生还是社招?很想知道能入职大概的要求是怎么样的。希望能传授一些经验
    qsnow6
        54
    qsnow6  
       2018-04-04 22:20:56 +08:00
    月经贴
    ZoomQuiet
        55
    ZoomQuiet  
       2018-04-06 08:54:50 +08:00 via iPhone
    Bottle
    是也乎 ╮(╯▽╰)╭

    不解释…
    vipppppp
        56
    vipppppp  
       2018-04-23 17:53:40 +08:00
    @Jaymiii 不好意思,之前你的回复刚好在我的消息通知下一页,没注意到
    我是通信毕业的,毕业后加入了一家比较大的公司做网络运维,觉得不适合自己,在上班空余的时候就自学,入职不到半年就辞职了,在职期间零零散散学了 2,3 个月 python,然后辞职后,自己学习了 django 二个月,就硬着头皮去面试了。
    大概就掌握了 mysql,计算机网络,还有一些 web 知识和 python 知识,当然还有大学的一些基本的编程基础,其实,觉得找份工作不会很难,主要是好与不好,如果没有很多的资本,我觉得就不要太挑剔公司,为了入个门最重要~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2808 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:44 · PVG 16:44 · LAX 00:44 · JFK 03:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.