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

Tornado x MVC

  •  1
     
  •   PyHub · 2016-05-17 23:39:33 +08:00 · 2837 次点击
    这是一个创建于 3145 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Tornado 是一款基于 Python 的非阻塞式 Web 服务器框架,从小巧、灵活性的角度来看介于 Flask 和 Django 之间,但在高并发性能上却显著优于前两者,这也是 PyHub 采用 Tornado 框架的原因之一。和 Flask 类似,不需要进行复杂的配置和设定,只需简单几行就可以完成一个可运行的 Tornado 服务程序:

    import tornado.ioloop
    import tornado.web
    
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.write("Hello, world")
    
    def make_app():
        return tornado.web.Application([
            (r"/", MainHandler),
        ])
    
    if __name__ == "__main__":
        app = make_app()
        app.listen(8888)
        tornado.ioloop.IOLoop.current().start()
    

    运行之后就可以在 http://localhost:8888 访问网页。 然而灵活性的缺点在于缺乏良好的组织结构,往往是在开发过程中随着需求的增加而逐渐增加 router => Handler,导致项目结构混乱,非常不利于维护。为了解决这一问题,今天我将 PyHub 的代码进行简单的分离、重构,区分出 ModelController,加上原有的 Template(View),形成 MVC 结构。为了方便以后重复利用,我将其基本结构抽取出来,新建了一个 tornado-MVC 的模板项目: https://github.com/rainyear/tornado-mvc

    项目的目录结构如下:

    .
    ├── LICENSE
    ├── README.md
    ├── app.py
    ├── config
    │   └── __init__.py
    ├── controller
    │   ├── HomeHandler.py
    │   └── __init__.py
    ├── model
    │   └── __init__.py
    ├── requirements.txt
    ├── static
    │   ├── css
    │   ├── images
    │   └── js
    └── view
        └── 404.html
    

    安装、使用步骤:

    git clone https://github.com/rainyear/tornado-mvc.git
    cd tornado-mvc/
    python3 -m venv venv3
    source venv3/bin/activate
    pip install -r requirements.txt
    
    python app.py --env=dev
    

    扩展:

    框架基于 Python 3tornado 4.3,数据库可以通过修改 model/__init__.py 切换到非 MongoDB 环境;可以通过 config/__init__.py 修改一些配置信息,若是敏感性的配置信息(如 Cookie 秘钥)可加入到 .gitignore 防止上传到公开仓库;增加新的路由和 Handler 分别修改 app.py 中的 router 以及向 controller/ 中添加新的处理方法类,注意应继承 BaseController 并将公有方法放在 BaseController 中,并通过 controller/__init__.py 中的 __all__ 变量设定 from controller import * 导入的方法。

    Tornado 教程资源

    了解更多 Tornado 相关的信息和教程,可以参考:

    1. 官方文档[英文]: http://www.tornadoweb.org/en/stable/
    2. 中文翻译[基于 tornado-1.2.1]: http://www.tornadoweb.cn/
    3. 官方 Demo : https://github.com/tornadoweb/tornado/tree/master/demos
    4. PyHub 项目源码: https://github.com/PyHubCC/pyhub.cc


    namebyrant
        1
    namebyrant  
       2016-05-18 00:10:04 +08:00
    我等新人可以学习观摩,赞
    fy
        2
    fy  
       2016-05-18 02:55:40 +08:00
    搭车,同 tornado 项目原型 /生成器:
    https://github.com/fy0/fpage
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 09:55 · PVG 17:55 · LAX 01:55 · JFK 04:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.