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

如果V2EX在今天才开始开发,会用什么Python Web框架?

  •  
  •   kwd98 · 2014-01-22 17:03:45 +08:00 · 18039 次点击
    这是一个创建于 3752 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2014-01-23 10:44:12 +08:00
    Livid本人的回复: "依然会用 Tornado,最大的坑其实是 MySQL,如果现在新开始的话,会更多依赖 Redis。"
    93 条回复    1970-01-01 08:00:00 +08:00
    whatsupbitch
        1
    whatsupbitch  
       2014-01-22 17:16:02 +08:00
    当然还是tornado我觉得
    shiny
        2
    shiny  
       2014-01-22 17:18:47 +08:00
    如果标题换成这个会比较有意思:如果豆瓣在今天才开始开发,会用什么 Python Web 框架?
    kwd98
        3
    kwd98  
    OP
       2014-01-22 17:38:46 +08:00
    @shiny 豆瓣内部新项目有很多是用django/flask http://www.weibo.com/1582970173/Al9YgDvo1
    kwd98
        4
    kwd98  
    OP
       2014-01-22 17:42:56 +08:00
    @whatsupbitch tornado性能确实很好,但是社区就不知道。
    passluo
        5
    passluo  
       2014-01-22 17:46:54 +08:00
    flask 很多东西都要自己修修改改才能用。。。。
    kwd98
        6
    kwd98  
    OP
       2014-01-22 17:56:52 +08:00   ❤️ 2
    Flask给你很多自由,让你自己做决定。Django可能就是convention over configuration。
    kwd98
        7
    kwd98  
    OP
       2014-01-22 17:57:08 +08:00
    @passluo Flask给你很多自由,让你自己做决定。Django可能就是convention over configuration。
    davepkxxx
        8
    davepkxxx  
       2014-01-22 18:05:50 +08:00
    还会用python吗?
    passluo
        9
    passluo  
       2014-01-22 18:07:30 +08:00
    太多的自由也是一种痛。
    rqrq
        10
    rqrq  
       2014-01-22 18:10:36 +08:00   ❤️ 1
    @shiny 豆瓣创始人曾经说过如果再来一次会选php
    kwd98
        11
    kwd98  
    OP
       2014-01-22 18:13:01 +08:00
    @davepkxxx 像Go什么的,在并发方面确实是高上大。。。。。。但是"Life is short, You need Python"
    kwd98
        12
    kwd98  
    OP
       2014-01-22 18:16:27 +08:00
    @rqrq @shiny 出处在哪? 阿北没用过PHP啊。 他在豆瓣上的回答: http://www.douban.com/group/topic/1000645/
    kwd98
        13
    kwd98  
    OP
       2014-01-22 18:18:08 +08:00
    @rqrq @shiny 还有阿北06年的回答: 如果现在重新开发douban,会选择什么开发框架? - http://www.douban.com/group/topic/1031810/
    kwd98
        14
    kwd98  
    OP
       2014-01-22 18:23:39 +08:00
    @passluo 适合长期项目吧,像Quora当初选择Pylons就是因为它给你很多的自由。

    https://www.quora.com/Quora-Infrastructure/Why-did-Quora-choose-to-develop-in-Pylons
    kwd98
        15
    kwd98  
    OP
       2014-01-22 18:26:16 +08:00
    @rqrq @shiny 还有Adam D'Angelo(Facebook第一任CTO)讲为什么选择Python而不是PHP去开发Quora? https://www.quora.com/Quora-Infrastructure/Why-did-Quora-choose-Python-for-its-development
    shiny
        16
    shiny  
       2014-01-22 18:26:24 +08:00
    @rqrq 请求来源?谢谢。
    @kwd98 另外好奇的是为什么豆瓣不用 Tornado?
    kwd98
        17
    kwd98  
    OP
       2014-01-22 18:39:17 +08:00 via Android   ❤️ 1
    @shiny 不是内部人士,不知。但Tornado是09年才开源的(Wiki)。
    RIcter
        18
    RIcter  
       2014-01-22 18:54:13 +08:00
    当然用Django..
    kwd98
        19
    kwd98  
    OP
       2014-01-22 19:01:15 +08:00 via Android
    @RIcter Django确实很多公司都在用。但每次听别人说Jinja2、SQLAlchemy比Django自带的要好,就。。。
    CMGS
        20
    CMGS  
       2014-01-22 19:05:41 +08:00
    FLASK自己改改凑合着能用的
    Bottle得改更多
    别给我提Django
    Tornado最大的问题其实是写法别扭
    以上
    RIcter
        21
    RIcter  
       2014-01-22 19:06:39 +08:00
    @kwd98 Django轮子少啦,我还用web.py我会说...
    loveminds
        22
    loveminds  
       2014-01-22 19:08:14 +08:00 via Android
    @kwd98 嗯,自定义強
    kwd98
        23
    kwd98  
    OP
       2014-01-22 19:16:10 +08:00 via Android
    @CMGS 你不喜欢Django的原因?
    passluo
        24
    passluo  
       2014-01-22 19:16:18 +08:00
    嗯,如果你一开始就打算长线的开发,提前做好各种准备和设计,打好基础,自己造适合自己的轮子,OK。

    如果是敏捷开发,用各种flask插件快速架构。。。呵呵吼。。。。那坑大得你爬都爬不出去。。。等着后面重构吧。。。。


    不过总的来说还是很喜欢Flask的。
    passluo
        25
    passluo  
       2014-01-22 19:17:47 +08:00
    @CMGS 阿富汗也能上V2EX??(笑。。。
    fanzeyi
        26
    fanzeyi  
       2014-01-22 19:23:09 +08:00
    @kwd98 Django 太重

    @shiny 了解下历史,亲,豆瓣已经快十年了,Tornado才诞生几年?事情要有个先后。

    // 以上回复

    web.py 和 Tornado 现在回头看看都觉得写法挺别扭的,至于 Quixote ,已经不是觉得写法别扭的问题了,和这些新框架不在一个逻辑上..
    kwd98
        27
    kwd98  
    OP
       2014-01-22 19:26:52 +08:00 via Android
    @passluo 当自己做很多架构上的决定时 ,经验确实很重要。要是新手难免掉坑了,这时要靠社区拉一把了。。。Kenneth Reitz讲的那篇Flasky Goodness对我的影响蛮深的 https://speakerdeck.com/kennethreitz/flasky-goodness
    dongk
        28
    dongk  
       2014-01-22 19:27:56 +08:00
    @Livid 会自己造个轮子
    shiny
        29
    shiny  
       2014-01-22 19:30:23 +08:00
    @fanzeyi 是指新功能呀亲!! 看三楼回复好吗亲!!
    kwd98
        30
    kwd98  
    OP
       2014-01-22 19:44:13 +08:00
    @fanzeyi Django相比其他框架确实比较重。但对做传统的Content-Heavy Sites有很大的优势。05年DHH就说Rails是做Web App用的,而Django是做用来做Website。(那时他和Django创造者Adrian Holovaty进行演讲和Q&A - Snakes and Rubies: http://www.youtube.com/results?search_query=Adrian%20Holovaty%20dhh&sm=3)

    但是在DjangoCon 2012 - BDFL Keynote上,Adrian Holovaty有提到未来的Django是朝Web App趋势走(视频26:24 -
    )。

    你现在的用的是?
    rqrq
        31
    rqrq  
       2014-01-22 19:51:44 +08:00
    @kwd98
    @shiny
    我在上面发言之前找过证据没找到...但是我又的确记得他说过“python不适合页面比较复杂的网站,如果重新开始会使用php”这样的话。
    你们就当没这回事吧。
    kwd98
        32
    kwd98  
    OP
       2014-01-22 19:52:44 +08:00
    @dongk 联想起了他10年在ifanr的访谈 http://www.ifanr.com/22202
    clino
        33
    clino  
       2014-01-22 20:55:20 +08:00
    uliweb 吧, hoho~ 我觉得这个最棒
    kwd98
        34
    kwd98  
    OP
       2014-01-22 21:09:03 +08:00
    @clino 有听说过。跟其他框架比,有没有什么特别的优点?
    fanzeyi
        35
    fanzeyi  
       2014-01-22 21:18:41 +08:00
    @shiny 哦,文化问题,豆瓣里还有不少项目是用的 Quixote 呢,豆瓣的 AE 发展起来的时候,Python 的 Web 框架世界已经是 Flask 为主流了(除去 Django 不说的框架),所以是 Flask/Django 为主,如果豆瓣的 AE 早诞生几年,或许是 Tornado 也说不定。

    @kwd98 就我个人的看法,Django 和 Rails 都是一个属性,敏捷类的框架,如果你想快速的解决一个问题,建立一个网站,那 Django 和 Rails 还是很适合,但是若需要考虑更多的问题,那 Django 就不适合,没写过 Rails ,不评论 Rails 是否合适。
    shiny
        36
    shiny  
       2014-01-22 21:24:14 +08:00
    @fanzeyi 豆瓣阅读、东西、阿尔法城、达络也都还比较新吧,一部分产品独立性非常强,不清楚是否受历史影响(或者开发者熟悉什么就用什么)。
    guotie
        37
    guotie  
       2014-01-22 21:27:10 +08:00
    martini of golang
    clino
        38
    clino  
       2014-01-22 21:31:35 +08:00
    @kwd98 特点和优点在于"可重用性,可配置性和可替换性", 介绍看: http://limodou.github.io/uliweb-doc/zh_CN/introduction.html
    全的文档看这里: http://limodou.github.io/uliweb-doc/zh_CN/index.html
    kwd98
        39
    kwd98  
    OP
       2014-01-22 21:35:06 +08:00
    @fanzeyi 感觉Django很多大的网站都在用,Disqus、Instagram、OpenStack、Pinterest 、Rdio、BitBucket等。做长期项目用Django肯定会有很多限制,像自身的ORM跟Template System就一直用来和SQLAlchemy和Jinja2比。现在流行前端MVC+后端提供REST API,Django框架确实有点庞大不灵活。但像Django Rest Framework这样的第三方插件已经足够优秀好用了。Django的用户社区算是一大卖点。。。。。。
    fanzeyi
        40
    fanzeyi  
       2014-01-22 21:35:44 +08:00   ❤️ 1
    @shiny 独立性只是从产品上看起来的,这些基本上都是 Quixote 如果我没记错的话。

    教授说的 Django/Flask 多指的是内网的一些东西,外面能访问到的大部分都是 Quixote ,也有一点点 Django 据我所知,Flask 应该是没有的。
    kwd98
        41
    kwd98  
    OP
       2014-01-22 21:49:23 +08:00
    @guotie 学过Python之后,接触Golang有什么感觉?有什么不同吗?
    shiny
        42
    shiny  
       2014-01-22 22:00:08 +08:00
    @fanzeyi 阿尔法城甚至用 oAuth2 来登录,和独立应用已经没什么区别了吧?
    tomnee
        43
    tomnee  
       2014-01-23 00:16:36 +08:00   ❤️ 1
    其实长远来看,框架的很多东西都会被重写,flask就主张读其源码,既然以后总要删删改改,倒不如选一个像webpy,flask的轻框架。你可以很容易的知道哪一部分出了问题。
    ericFork
        44
    ericFork  
       2014-01-23 00:47:43 +08:00
    感觉有点歪楼了,不是在讨论 v2ex 吗……

    @CMGS 你回来了?
    CMGS
        45
    CMGS  
       2014-01-23 02:41:08 +08:00
    @kwd98 如果你处理过Django使用MySQLdb内部API导致换PyMySQL出bug这种问题的话……我一直不认为Django是个良好设计的框架,各层耦合太深,诚然起手是快,问题是做服务不会给你只有起手的机会的。

    @passluo 我在迪拜机场了,不出意外明天就能到HK
    @ericFork 圣驾要恭迎我么!我在迪拜机场了明天出现在HK!
    CMGS
        46
    CMGS  
       2014-01-23 02:43:38 +08:00   ❤️ 1
    而且@kwd98 我想说的是快盘也用Django……怎么用还是得看开发者……快盘这边我知道的就是Django拆成了Gateway,所以你列举的那几个例子我想或多或少都把Django拆得七七八八的了。当然这是有成本的,所以如果你想长线开整的话一开始用Django并非一个很好的选择。

    至于我为啥知道快盘的服务端是用Django写的……那就是另外一个故事了 = =
    Livid
        47
    Livid  
    MOD
       2014-01-23 04:59:57 +08:00 via iPhone   ❤️ 3
    依然会用 Tornado,最大的坑其实是 MySQL,如果现在新开始的话,会更多依赖 Redis。
    mahone3297
        48
    mahone3297  
       2014-01-23 07:23:44 +08:00
    @RIcter 上次用web.py开发了一个很小的项目,感觉什么都要自己动手,应该也有很多地方没考虑周到。。。现在想想,感觉应该用Django开发。。。和你的想法刚好相反,指教下?我不太懂python。。。
    dcoder
        49
    dcoder  
       2014-01-23 07:51:50 +08:00
    @Livid MySQL坑是怎么回事?
    kwd98
        50
    kwd98  
    OP
       2014-01-23 08:17:48 +08:00
    @tomnee Flask就像前面有人说过的一样,要是没什么经验,在架构上没设计好,掉坑的可能性比较大。
    kwd98
        51
    kwd98  
    OP
       2014-01-23 08:27:21 +08:00   ❤️ 1
    @dcoder 大多数Python程序员还是推荐PostgreSQL https://twitter.com/alex_gaynor/status/397961679712944128
    yeelone
        52
    yeelone  
       2014-01-23 08:29:59 +08:00
    如果是我,当选择python时,就会选择tornado .
    fucker
        53
    fucker  
       2014-01-23 08:49:48 +08:00
    表示一直用webpy,偶尔会用bottle。但是tornado,django都是测试了之后觉得不合口味,而且自己瞎做一些小项目而已,webpy和bottle确实很轻便。
    kwd98
        54
    kwd98  
    OP
       2014-01-23 08:57:19 +08:00
    @yeelone 具体原因? 性能? 还有你有用过其他框架吗, 相比之下觉得如何?
    kwd98
        55
    kwd98  
    OP
       2014-01-23 08:59:02 +08:00
    @fucker 个人网站确实适合不过了。但是,如果说你打算做个大的项目,你更倾向于?
    clino
        56
    clino  
       2014-01-23 09:08:34 +08:00
    @kwd98 我觉得livid说的不光是mysql,而是关系型数据库比较坑
    mimzy
        57
    mimzy  
       2014-01-23 09:10:24 +08:00   ❤️ 1
    RIcter
        58
    RIcter  
       2014-01-23 09:35:20 +08:00
    @mahone3297 web.py轻嘛..我现在开发的一个比较大的项目是用django,web.py就是blog..
    mahone3297
        59
    mahone3297  
       2014-01-23 09:40:24 +08:00
    @RIcter 对,轻,我当时也是这样想的,所以选了web.py,呵呵。
    kwd98
        60
    kwd98  
    OP
       2014-01-23 09:44:40 +08:00
    @clino 那就只能说不同场景用不同类数据库。论稳定性,RabbitMQ跟好。How Instagram Feeds Work: Celery and RabbitMQ - http://blogs.vmware.com/vfabric/2013/04/how-instagram-feeds-work-celery-and-rabbitmq.html
    pythonee
        61
    pythonee  
       2014-01-23 10:04:12 +08:00
    没有人说pyramid吗
    RIcter
        62
    RIcter  
       2014-01-23 10:10:09 +08:00
    @mahone3297 但是轮子少到不能忍,各种造轮子
    kwd98
        63
    kwd98  
    OP
       2014-01-23 10:33:35 +08:00
    @mahone3297 @RIcter web.py用户社区如何? 像Flask框架虽小,但GitHub上第三方插件很多。
    kwd98
        64
    kwd98  
    OP
       2014-01-23 10:37:12 +08:00
    @pythonee 前面有提到过Quora用的是Pylons。码农周刊也有分享过 http://www.weibo.com/1894238970/ArPUPuTgq
    pynix
        65
    pynix  
       2014-01-23 10:39:23 +08:00 via Android   ❤️ 1
    说不定会用rails
    RIcter
        66
    RIcter  
       2014-01-23 10:42:04 +08:00
    @kwd98 说多了都是泪
    felinx
        67
    felinx  
       2014-01-23 10:43:35 +08:00
    @Livid 呵呵,我们重度使用redis
    ipconfiger
        68
    ipconfiger  
       2014-01-23 11:09:46 +08:00
    @felinx 有没有好的群集方案?
    cyberscorpio
        69
    cyberscorpio  
       2014-01-23 11:13:18 +08:00
    web.py 创始人不是离世了么,它的前途在哪里?
    tan9le
        70
    tan9le  
       2014-01-23 11:17:20 +08:00
    kwd98
        71
    kwd98  
    OP
       2014-01-23 11:26:29 +08:00   ❤️ 1
    @cyberscorpio aaronsw的不幸确实对webpy有影响,但开源项目都是很多core committers的。相同情况也发生在yum开源项目 https://news.ycombinator.com/item?id=6013989
    cyberscorpio
        72
    cyberscorpio  
       2014-01-23 11:26:48 +08:00
    @tan9le 感觉提交很不活跃,最多的提交者是个三哥。btw,从相貌上来看,Aaron Swartz 好像也是个三哥。
    mahone3297
        73
    mahone3297  
       2014-01-23 12:13:30 +08:00
    @RIcter 哈哈,是的,比较辛苦。。。造轮子。。。

    @kwd98 感觉用户社区不怎样。。。。
    clino
        74
    clino  
       2014-01-23 12:26:12 +08:00
    @kwd98 redis 和 rabbitmq 摆在一起比较? 只能比较用于消息队列的这种用途吧? rabbitmq 能有数据库的功能来和redis比较?
    kwd98
        75
    kwd98  
    OP
       2014-01-23 12:34:53 +08:00 via Android
    @clino 对, 就信息队列而言。
    clino
        76
    clino  
       2014-01-23 13:49:44 +08:00
    @kwd98 如果redis作为mysql的替代品来用,那消息队列这部分在这种替代里是不重要的
    mengzhuo
        77
    mengzhuo  
       2014-01-23 13:59:27 +08:00
    必须还是Tornado,

    最近整CouchDB,觉得未来的趋势是
    数据库和app可能会深度整合,前后端完全分离
    kwd98
        78
    kwd98  
    OP
       2014-01-23 14:19:28 +08:00
    @mengzhuo RESTful兴起再加上前端MVC框架流行后,前后端就分离了。
    fucker
        79
    fucker  
       2014-01-23 14:56:07 +08:00   ❤️ 1
    @kwd98 webpy吧,用lighttpd或者nginx做代理,N个端口或者N台服务器协同工作。
    听说django做大型项目很不错,我个人也没尝试过。webpy做小型的确实靠谱,大型的项目可以拆分为若干个小项目嘛。当然某些项目不大适合,纯属个人想法哈。
    dcoder
        80
    dcoder  
       2014-01-23 16:23:58 +08:00
    @mimzy 多谢!
    xjay
        81
    xjay  
       2014-01-23 21:54:58 +08:00
    gevent+itty,最近很喜欢这个组合。
    kwd98
        82
    kwd98  
    OP
       2014-01-23 22:08:49 +08:00
    @xjay 该作者在很有Django界很有名。但框架明显倾向于自己造轮子。。。最大的优点是?
    wssgcg1213
        83
    wssgcg1213  
       2014-01-24 01:10:14 +08:00
    @RIcter →_→
    CMGS
        84
    CMGS  
       2014-01-24 02:15:41 +08:00
    @clino @dcoder MySQLdb的坑可不是关系型数据库的坑……而是Python走这种事件驱动不得不面对的阻塞问题
    RIcter
        85
    RIcter  
       2014-01-24 06:44:12 +08:00
    @wssgcg1213 ....看头像就知道是你了
    clino
        86
    clino  
       2014-01-24 09:03:06 +08:00
    @CMGS 不太理解"Python走这种事件驱动不得不面对的阻塞问题", 事件驱动应该也能支持大的并发才对,所以相关的性能应该不是问题吧, 那是开发起来太麻烦了?能解释一下吗?
    要是我就选择gevent ,协程方式的编程接口比较爽, 用同步的方式写异步的程序,用这个对比事件驱动的可以有优越感,hoho
    guotie
        87
    guotie  
       2014-01-24 09:22:43 +08:00
    @kwd98 golang更简单,更直接,效率更高!

    有些python代码写的很不易懂,尤其是大量使用yield的代码
    clino
        88
    clino  
       2014-01-24 09:46:50 +08:00
    @guotie lua里也是用类似的coroutine.yield吧. go 里的形式是怎么样的? 我觉得主要是coroutine本身的运行过程复杂才会难懂的吧.
    kwd98
        89
    kwd98  
    OP
       2014-01-24 10:03:31 +08:00
    @clino Rob Pike: Google I/O 2012 - Go Concurrency Patterns
    看完就会觉得golang在并发方面是高上大。
    guotie
        90
    guotie  
       2014-01-24 10:03:43 +08:00   ❤️ 1
    go的并发很简单:
    go xxxx

    go的并发协程之间的通信用channel,很直接。

    nsq是一个实时消息队列,代码大量使用了并发和channel通信,但是代码很容易读懂。
    duoduo3369
        91
    duoduo3369  
       2014-01-24 12:10:04 +08:00
    django也可以前后端彻底分开开发啊 后端用django rest 前端可以自选高大上的mvc(backbone,anguler),或者用任何前端实现
    kwd98
        92
    kwd98  
    OP
       2014-01-24 12:18:03 +08:00
    @duoduo3369 恩。DRF的generic view和viewset很方便,可谓写REST API利器。前端像AngularJs这样只要在Template里用Verbatim或者直接到AngularJS里改$interpolate。
    clino
        93
    clino  
       2014-01-24 14:59:18 +08:00
    @kwd98 @guotie 视频看了一半,go提供的channel看起来不错,channel select这种都预置在语言里了,挺好的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2216 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:27 · PVG 19:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.