简介
Sanic 是基于 Python 3.5+ 的 异步Web 框架,其特点是快速、简单、高效。
Sanic 使用 asyncio 和 uvloop 库构建,因此它比其他常规 Web 框架要快得多,以其高效的异步处理和简单易用的API而著称。
Sanic 拥有强大的路由系统,可以快速创建 RESTful API。同时还支持处理请求的中间件,可以对请求进行预处理或修改响应。
Sanic 支持使用蓝图组织视图,可以将视图分成不同模块,以提高代码可读性和维护性。
使用教程
下面是使用Sanic搭建的一个包含views、models目录、使用蓝图创建路由以及使用MySQL数据库的后端的示例代码:
1. 安装库
pip install sanic
pip install aiomysql
2.项目根目录创建 app.py 文件
from sanic import Sanic
from sanic.response import json
from sanic_blueprints import Blueprint
from aiomysql.sa import create_engine
app = Sanic()
# 创建蓝图
bp = Blueprint("users", url_prefix="/users")
# 数据库配置
db_config = {
"host": "localhost",
"user": "root",
"password": "root",
"db": "test"
}
# 创建数据库引擎
async def create_db_engine():
engine = await create_engine(
host=db_config["host"],
user=db_config["user"],
password=db_config["password"],
db=db_config["db"],
)
return engine
# 数据库模型
async def get_user_by_id(user_id):
async with create_db_engine().acquire() as conn:
async with conn.execute(select([users]).where(users.c.id==user_id)) as result:
return await result.fetchone()
# 视图函数
@bp.route("/<user_id>")
async def get_user(request, user_id):
user = await get_user_by_id(user_id)
return json({"user": user})
# 注册蓝图
app.blueprint(bp)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
3.项目根目录下创建models目录
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
# 定义模型
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String(255))
age = Column(Integer)
# 初始化数据库
engine = create_engine("mysql://root:root@localhost/test")
Base.metadata.create_all(engine)
4.项目根目录下创建views目录
在 views 目录中,我们可以将所有的视图函数放置在一个单独的文件中,例如 users.py:
from sanic.response import json
from sanic_blueprints import Blueprint
from models import User, get_user_by_id
bp = Blueprint("users", url_prefix="/users")
@bp.route("/<user_id>")
async def get_user(request, user_id):
user = await get_user_by_id(user_id)
return json({"user": user})
最后,在 app.py 文件中引入 users 视图:
from views import users
# 注册蓝图
app.blueprint(users.bp)
运行 app.py 文件,就可以在浏览器中访问 http://localhost:8000/users/1,并获得一个 JSON 格式的用户信息响应。
小结
Sanic还提供了许多有用的功能,例如WebSocket支持、CORS支持、蓝图、静态文件服务等等。Sanic的文档也非常详细,对新手来说是一个不错的资源。
总的来说,Sanic 是一个快速、易用、可扩展的 Web 框架,非常适合用于构建 RESTful API 和快速原型开发,如果你正在寻找一种快速、轻量级的Python异步Web框架,那么Sanic值得一试。