Sanic 简介#
安装:
pip install sanic
Sanic 拥有你所需的所有工具,用于可扩展的生产级服务器——开箱即用!包括完整的 TLS 支持。
from sanic import Sanic
from sanic.response import text
app = Sanic("MyHelloWorldApp")
@app.get("/")
async def hello_world(request):
return text("Hello, world.")
每个请求处理器可以是同步的(
def hello_world
)或异步的(async def hello_world
)。除非你有明确的理由,否则总是选择async
。request
对象总是处理器的第一个参数。其他框架将其作为上下文变量传递。在async
世界中,这样做效果不佳,明确表达会更容易(更不用说更清晰、性能更好)。你必须使用响应类型。许多其他框架允许你有这样的返回值:
return "Hello, world."
或这样:return {"foo": "bar"}
。但是,为了进行这种隐式调用,链条中的某处需要花费宝贵的时间来尝试确定你的意图。因此,为了这种便利性,Sanic 决定要求显式调用。
将上面的文件保存为 server.py
。然后启动它
sanic server
备注
这是另一个重要的区别。其他框架带有内置的开发服务器,并明确表示它仅用于开发用途。Sanic 则恰恰相反。
打包的服务器是可以直接用于生产环境的。
可以在 jupyter notebook 中展示:
import asyncio
server = await app.create_server(host='localhost', port=8000, debug=True)
await server.startup()
# await server.serve_forever()
[2024-01-24 10:32:54 +0000] [2414] [DEBUG]
Sanic
Build Fast. Run Fast.
[2024-01-24 10:32:54 +0000] [2414] [INFO] Sanic v23.12.1
[2024-01-24 10:32:54 +0000] [2414] [INFO] Goin' Fast @ http://localhost:8000
[2024-01-24 10:32:54 +0000] [2414] [INFO] app: MyHelloWorldApp
[2024-01-24 10:32:54 +0000] [2414] [INFO] mode: debug, single worker
[2024-01-24 10:32:54 +0000] [2414] [INFO] server: sanic, HTTP/1.1
[2024-01-24 10:32:54 +0000] [2414] [INFO] python: 3.10.13
[2024-01-24 10:32:54 +0000] [2414] [INFO] platform: Linux-6.2.0-1018-azure-x86_64-with-glibc2.35
[2024-01-24 10:32:54 +0000] [2414] [INFO] packages: sanic-routing==23.12.0, sanic-ext==23.12.0
[2024-01-24 10:32:54 +0000] [2414] [INFO] Sanic Extensions:
[2024-01-24 10:32:54 +0000] [2414] [INFO] > injection [0 dependencies; 0 constants]
[2024-01-24 10:32:54 +0000] [2414] [INFO] > openapi [http://<unknown>/docs]
[2024-01-24 10:32:54 +0000] [2414] [INFO] > http
[2024-01-24 10:32:54 +0000] [2414] [INFO] > templating [jinja2==3.1.3]
也可以直接启动:
sanic path.to.server:app
Sanic 插件简介#
Sanic 有意追求简洁和中立的特性列表。该项目不希望要求你以某种特定方式构建你的应用程序,并尽量避免规定特定的开发模式。有许多由社区构建和维护的第三方插件,用于添加不符合核心仓库要求的其他功能。
然而,为了帮助 API 开发者,Sanic 组织维护了名为 Sanic Extensions 的官方插件,提供各种好东西,包括:
使用 Redoc 和/或 Swagger 的 OpenAPI 文档
CORS 保护
路由处理器中的依赖注入
请求查询参数和正文输入验证
自动创建
HEAD
、OPTIONS
和TRACE
端点预定义的、特定于端点的响应序列化器
设置的首选方法是与 Sanic 一起安装,但您也可以单独安装这些软件包。
pip install sanic[ext]
从 v21.12 开始,如果 Sanic Extensions 与 Sanic 在同一个环境中,Sanic 将自动设置 Sanic Extensions。您还将访问两个额外的应用程序属性:
app.extend()
- 用于配置 Sanic Extensionsapp.ext
- 附加到应用程序的 Extend 实例