Sanic Python异步框架:高性能Web开发利器

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Sanic简介

Sanic 是一个基于 Python 的现代异步 Web 框架,专为构建高性能 Web 应用而设计。它基于 asyncio,通过 async/await 语法支持高效处理数千个并发连接。Sanic 非常适合开发 REST API、微服务、实时应用和高负载后端系统。

Sanic 核心特性

性能与架构

Sanic 以执行速度为核心设计理念。该框架利用 asyncio 实现异步请求处理,性能可与 Node.js 和 Go 相媲美。内置的 async/await 支持让代码更易读、更高效。

功能亮点

  • 开箱即用的 async/await 完全支持
  • 带参数的路由和中间件
  • 内置 WebSocket 支持
  • 模板系统和静态文件处理
  • 支持 CORS、Cookie 和会话管理
  • 简洁清晰的项目结构
  • API 服务器出色的可扩展性

安装与初始配置

基础安装

pip install sanic

额外依赖

pip install sanic[ext]  # 扩展包
pip install jinja2 aiofiles python-dotenv

创建第一个应用

from sanic import Sanic
from sanic.response import text

app = Sanic("MyApp")

@app.get("/")
async def index(request):
    return text("你好,Sanic!")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

路由与请求处理

基础路由

@app.get("/")
async def get_handler(request):
    return text("GET 请求")

@app.post("/")
async def post_handler(request):
    return text("POST 请求")

@app.put("/")
async def put_handler(request):
    return text("PUT 请求")

@app.delete("/")
async def delete_handler(request):
    return text("DELETE 请求")

异步路由

import asyncio

@app.get("/async")
async def async_route(request):
    await asyncio.sleep(1)  # 模拟异步操作
    return text("异步响应")

参数与数据处理

路由参数

@app.get("/user/<user_id:int>")
async def get_user(request, user_id):
    return text(f"用户ID: {user_id}")

@app.get("/profile/<username:str>")
async def get_profile(request, username):
    return text(f"个人资料: {username}")

查询参数

@app.get("/search")
async def search(request):
    query = request.args.get("q", "无")
    limit = request.args.get("limit", "10")
    return text(f"搜索: {query}, 限制: {limit}")

JSON 和表单处理

from sanic.response import json

@app.post("/api/data")
async def receive_data(request):
    data = request.json
    return json({"received": data})

@app.post("/form")
async def handle_form(request):
    username = request.form.get("username")
    email = request.form.get("email")
    return json({"username": username, "email": email})

响应类型

多种响应格式

from sanic.response import text, json, html, redirect, file

@app.get("/text")
async def text_response(request):
    return text("纯文本")

@app.get("/json")
async def json_response(request):
    return json({"message": "JSON 响应"})

@app.get("/html")
async def html_response(request):
    return html("<h1>HTML 页面</h1>")

推荐