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 保护

  • 路由处理器中的依赖注入

  • 请求查询参数和正文输入验证

  • 自动创建 HEADOPTIONSTRACE 端点

  • 预定义的、特定于端点的响应序列化器

设置的首选方法是与 Sanic 一起安装,但您也可以单独安装这些软件包。

pip install sanic[ext]

从 v21.12 开始,如果 Sanic Extensions 与 Sanic 在同一个环境中,Sanic 将自动设置 Sanic Extensions。您还将访问两个额外的应用程序属性:

  • app.extend() - 用于配置 Sanic Extensions

  • app.ext - 附加到应用程序的 Extend 实例