微信号:Py_Hub

介绍:Life is Short; You need Python!

Tornado x MVC

2016-05-17 22:17 PyHub


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 的模板项目,开源地址可以通过原文链接查看。

项目的目录结构如下:

.
├── 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

  5. tornado-mvc:https://github.com/rainyear/tornado-mvc






 
PyHub 更多文章 PyTips 0x01 - Python 迭代器与生成器 PyTips 0x03 - Python 列表推导 PyTips 0x04 - Python 闭包与作用域 PyTips 0x05 - Python 函数参数与解包 MapReduce 原理与 Python 实践
猜您喜欢 Java I\/O模型从BIO到NIO和Reactor模式 【数据分析】多元统计分析之因子分析及R实现 关于领导力的3点经验 Early Amazon: Door desks 依托生态环境大数据创新环境管理