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

Tornado, Flask, Django是否可以代表Python世界中的3类典型Web框架?

  •  
  •   hustlzp ·
    hustlzp · 2013-09-27 20:35:05 +08:00 · 19917 次点击
    这是一个创建于 4076 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT.

    Flask代表micro(此类还有bottle和web.py)。

    Django代表full-stack。

    Tornado代表asynchronous 。

    可以这样认为吗?

    是否可以这样说:这3个框架基本可以代表Python Web开发的主要模式?
    13 条回复    1970-01-01 08:00:00 +08:00
    binux
        1
    binux  
       2013-09-27 20:48:41 +08:00
    我觉得这些框架只有功能多寡的不同,没有模式的不同

    从0考虑一个web框架可能有什么:
    * TCPServer
    * request,response封装
    -- 路由
    -- 接口转换
    * 模板
    * 工具集
    -- 数据库接口
    -- 各种转换
    -- 各种生成器

    回头看上面的几个框架,除了tornado自带了一个与众不同的TCPServer之外,三者没有任何不同
    只不过是API以及utils功能强弱的不同而已
    hustlzp
        2
    hustlzp  
    OP
       2013-09-27 20:58:29 +08:00
    @binux 个人感觉flask可以通过强大的扩展能力武装成Django一样强大。

    不过tornado的异步应该就和上面2者不太一样了。
    hustlzp
        3
    hustlzp  
    OP
       2013-09-27 20:59:08 +08:00
    恩,现在的框架的基本组成部分都是差不多的了,RoR带起来的MVC风。
    binux
        4
    binux  
       2013-09-27 21:00:10 +08:00
    @hustlzp 但是对于一般web应用来说,这样的差别对其不可见
    hustlzp
        5
    hustlzp  
    OP
       2013-09-27 21:25:34 +08:00
    @binux 是的。
    no13bus
        6
    no13bus  
       2013-09-27 21:55:23 +08:00
    web2py算啥
    fanzeyi
        7
    fanzeyi  
       2013-09-27 22:11:58 +08:00 via iPad
    quixote ...
    humiaozuzu
        8
    humiaozuzu  
       2013-09-28 00:07:54 +08:00   ❤️ 1
    可以,他们的适用场景不同,以及灵活性(于是这个不同口味的人选择就不同了)

    Django 就像 IDE 给你的插件(admin,orm,route 等)没法换,但是 Flask 像 Editor 有很多供选择的 batteries。

    以及,Flask 这货在 app 大之后,需要开发者自己有一定的经验和构架的能力才可以很好的控制各种模式:

    ### app framework

    - app factory
    - blueprint
    - api/template error handling
    - development/testing/staging/production server configurations
    - db logic
    - db logic error handing
    - controller
    - delayed jobs
    - json serialization/template rendering

    ### management

    - database miggration
    - app manage commands

    ### testing

    - moking/testing
    - profiling(performance testing)
    - security testing

    ### deployment/operation/monitor

    - deployment automation
    - manage automation
    - app exception monitor
    - app/db performance monitor
    hustlzp
        9
    hustlzp  
    OP
       2013-09-28 07:09:29 +08:00 via Android
    @humiaozuzu 感谢分享!
    julyclyde
        10
    julyclyde  
       2013-09-28 15:58:04 +08:00
    @binux 对。读过框架初始化那一段儿代码之后觉得其实也没多难。难的是细节的处理而不是框架的构建本身
    ryangao
        11
    ryangao  
       2013-09-30 22:11:46 +08:00
    Tornado 和其他框架重要的区别其实在完全不同的层次。它是应该和 Gevent / flup 去比,分别代表了处理并发请求的三种不同模型:基于事件的 CSP、基于 greenlet 的 reactor 模型和最常见的多线程模型。这里带来的才是根本的差异。
    至于 Flask vs Django vs Web.py,只不过是代码组织的一点不同而已。
    hustlzp
        12
    hustlzp  
    OP
       2013-09-30 22:13:10 +08:00
    @ryangao 原来如此,看来学习一下Tornado拓展视野是有必要的。
    julyclyde
        13
    julyclyde  
       2013-10-06 14:46:47 +08:00
    @ryangao 你说的这几种模型是在什么方面的划分?reactor这个词好像在很“科学”的一些资料上见过。不过平时看的都是工程技术类的资料啊。求扫盲
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5591 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 678ms · UTC 07:45 · PVG 15:45 · LAX 23:45 · JFK 02:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.