推荐一个Python + Tornado集成的项目框架

github: https://github.com/huangxingx/python-framework

├── docs
├── python-framework
│   ├── bexceptions
│   ├── celery_app
│   ├── common
│   ├── config
│   ├── constants
│   ├── handlers
│   │   ├── admin
│   │   ├── api
│   │   ├── base
│   │   └── web
│   ├── libs
│   │   └── __pycache__
│   ├── logs
│   ├── models
│   │   └── __pycache__
│   ├── services
│   ├── setting
│   ├── tests
│   └── utils
├── scripts
│   └── sql
└── tests

推荐一个Python + Tornado集成的项目框架

3 回复

对于Python + Tornado的集成框架,我推荐 Tornado-Utils 或者直接基于Tornado构建一个轻量级MVC结构。

如果你想要一个更“全栈”的解决方案,可以考虑 Tornado-BoilerplateTornado-Web。不过说实话,Tornado本身就是一个完整的异步Web框架,很多时候自己组织结构更干净。

这里给你一个我常用的基础项目结构示例:

project/
├── app.py                 # 应用入口
├── config.py              # 配置
├── requirements.txt       # 依赖
├── handlers/              # 请求处理器
│   ├── __init__.py
│   ├── base_handler.py   # 基础Handler
│   ├── user_handler.py
│   └── api/
│       └── v1/
│           └── user.py   # API版本化
├── models/               # 数据模型
│   ├── __init__.py
│   └── user.py
├── utils/                # 工具函数
│   ├── __init__.py
│   └── decorators.py     # 装饰器
└── static/               # 静态文件
    ├── css/
    ├── js/
    └── images/

核心的 app.py 可以这样写:

import tornado.ioloop
import tornado.web
from tornado.options import define, options
from handlers.user_handler import UserHandler
from handlers.api.v1.user import UserAPIHandler

define("port", default=8888, help="运行端口", type=int)

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/user/(\d+)", UserHandler),
            (r"/api/v1/user", UserAPIHandler),
            (r"/static/(.*)", tornado.web.StaticFileHandler, {"path": "static"}),
        ]
        settings = {
            "debug": True,
            "autoreload": True,
            "template_path": "templates",
        }
        super().__init__(handlers, **settings)

def main():
    tornado.options.parse_command_line()
    app = Application()
    app.listen(options.port)
    print(f"Server running on http://localhost:{options.port}")
    tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":
    main()

对于API Handler,我习惯这样组织:

import tornado.web
import tornado.gen
from utils.decorators import authenticated

class UserAPIHandler(tornado.web.RequestHandler):
    async def get(self):
        """获取用户信息"""
        user_id = self.get_argument("id")
        # 异步数据库查询
        user = await self.get_user_async(user_id)
        self.write({"user": user})
    
    @authenticated
    async def post(self):
        """创建用户"""
        data = tornado.escape.json_decode(self.request.body)
        # 处理业务逻辑
        result = await self.create_user_async(data)
        self.set_status(201)
        self.write(result)
    
    async def get_user_async(self, user_id):
        # 模拟异步操作
        return {"id": user_id, "name": "test"}
    
    async def create_user_async(self, data):
        return {"id": 1, **data}

关键点:

  1. Handler分层:基础Handler处理通用逻辑(认证、日志等),具体Handler继承它
  2. 异步化:所有IO操作都用 async/await,发挥Tornado的异步优势
  3. 配置分离:通过 tornado.options 管理配置
  4. 静态文件:直接用Tornado的StaticFileHandler,简单高效

如果你需要ORM集成,可以加上 tortoise-ormsqlalchemy(需要搭配异步驱动)。对于模板,Tornado自带的模板引擎就够用了。

其实没必要追求“大而全”的框架,Tornado本身足够灵活,按需添加组件就好。

总结:自己搭一个轻量结构最实用。


有时间看看。。。

回到顶部