推荐一个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-Boilerplate 或 Tornado-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}
关键点:
- Handler分层:基础Handler处理通用逻辑(认证、日志等),具体Handler继承它
- 异步化:所有IO操作都用
async/await,发挥Tornado的异步优势 - 配置分离:通过
tornado.options管理配置 - 静态文件:直接用Tornado的StaticFileHandler,简单高效
如果你需要ORM集成,可以加上 tortoise-orm 或 sqlalchemy(需要搭配异步驱动)。对于模板,Tornado自带的模板引擎就够用了。
其实没必要追求“大而全”的框架,Tornado本身足够灵活,按需添加组件就好。
总结:自己搭一个轻量结构最实用。
可以
有时间看看。。。

