尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Sanic 快速上手指南:环境要求、首个应用、生产级启动与 Sanic Extensions 扩展生态

Sanic 快速上手指南:环境要求、首个应用、生产级启动与 Sanic Extensions 扩展生态 后端Web框架【免费下载链接】sanicAccelerate your web app development | Build fast. Run fast.项目地址https://gitcode.com/gh_mirrors/sa/sanic点击查看免费下载本指南基于 Sanic 官方入门文档系统讲解如何从零开始安装 Sanic、编写并运行第一个异步 Web 应用同时结合仓库源码深入说明其 API 设计原则、内置生产服务器的 CLI 启动方式以及由官方维护的 Sanic Extensions 插件生态能为你带来哪些开箱即用的能力。读完本文你将能够独立完成一个 Sanic 应用的创建、启动与扩展配置并理解每一步背后的源码依据。环境要求支持的 Python 版本在开始之前请确认你的环境运行的是受支持的 Python 版本。官方入门文档要求 Python 3.9 或更高版本并注明 Sanic 当前支持 Python 3.9 – 3.13。从当前仓库的实际打包配置来看setup.py 中声明的python_requires为3.10其 classifiers 声明 覆盖 Python 3.10、3.11、3.12、3.13 与 3.14。因此以当前仓库代码为准建议使用Python 3.10 及以上版本进行开发与部署以获得最完整的兼容性支持。安装 Sanic安装过程非常简单使用 pip 即可pip install sanic查看 setup.py 可以了解 Sanic 的核心运行时依赖其中包括sanic-routing23.12.0负责高性能路由解析对应仓库中 sanic/router.py 的 Router 实现httptools用于 HTTP 协议解析uvloop非 Windows 平台基于 libuv 的事件循环加速器ujson非 Windows 平台更快的 JSON 编码解码aiofiles、websockets、multidict、html5tagger等辅助库。安装完成后可以通过sanic --version或-v验证安装是否成功。测试用例 tests/test_cli.py 中验证了该命令会输出形如Sanic 版本号; Routing 路由版本号的版本信息。第一个 Hello World 应用如果你用过基于装饰器decorator的 Web 框架下面的代码会让你感到非常熟悉from sanic import Sanic from sanic.response import text app Sanic(MyHelloWorldApp) app.get(/) async def hello_world(request): return text(Hello, world.)逐行拆解这段代码from sanic import Sanic导入应用类。在 sanic/init.py 中Sanic与Config、Blueprint、Request以及各种响应类型和异常类型一同被导出构成对外公开的统一 API 入口app Sanic(MyHelloWorldApp)创建应用实例MyHelloWorldApp是该应用的名称会在日志与 Inspector 等调试工具中显示app.get(/)使用装饰器将函数注册为GET /路由。app.get是 sanic/app.py 中Sanic类提供的一组 HTTP 方法快捷注册之一除此之外还有app.post、app.put、app.delete等它们最终都汇入统一的路由注册机制async def hello_world(request)异步请求处理器return text(Hello, world.)返回一个text类型的 HTTP 响应。仓库中的 examples/hello_world.py 给出了一个稍完整的变体展示了app.route(/)通用装饰器配合response.json返回 JSON 的写法from sanic import Sanic, response app Sanic(Example) app.route(/) async def test(request): return response.json({test: True}) if __name__ __main__: app.run(host0.0.0.0, port8000)理解 Sanic 的三个设计要点如果你是从 Flask 或其他框架迁移过来的入门文档特别强调了三处重要差异它们都源于 Sanic 追求性能、灵活性与易用性 的核心设计原则1. 处理器既可以是同步也可以是异步# 同步处理器 def hello_world(request): return text(Hello, world.) # 异步处理器 async def hello_world(request): return text(Hello, world.)每个请求处理器既可以是同步函数def也可以是异步函数async def。除非有明确理由否则始终推荐使用async版本以充分利用 asyncio 的事件驱动模型。2.request对象始终是处理器的第一个参数async def hello_world(request):其他框架往往把请求对象塞进上下文变量context variable中供导入使用。但在异步世界中这种方式既不优雅也不高效。Sanic 选择显式地把request作为第一个参数传入这种显式优于隐式的做法更清晰也更具性能优势。3. 必须显式返回一个响应对象很多框架允许直接返回字符串或字典例如return Hello, world.或return {foo: bar}。但要做到这种隐式转换框架在请求链路的某个环节必然需要花费时间猜测你的意图。Sanic 以牺牲这部分便利为代价换取更可预测、更高性能的执行路径因此强制要求显式返回响应对象。常用的显式响应类型在 sanic/init.py 中均有导出包括text、json、html、file、raw、redirect、empty等覆盖了绝大多数业务场景。运行你的应用将上面的代码保存为server.py然后在命令行中启动它sanic server这条命令会查找名为server的模块并自动定位其中的 Sanic 应用实例。sanic命令的入口定义在 setup.py 的entry_points中sanic sanic.__main__:main其实现位于 sanic/main.pyCLI 参数解析则由 sanic/cli/arguments.py 与 sanic/cli/base.py 完成。常用的 CLI 启动参数结合 sanic/cli/arguments.py 的实现与 tests/test_cli.py 中的测试用例以下参数值得掌握参数说明默认值-H, --host绑定地址127.0.0.1-p, --port监听端口8000-w, --workers启动的 worker 进程数多 worker 模式下会输出mode: production, w/ N workers1--debug开启调试模式开启 debug 但默认不自动重载关闭-d, --dev开发模式等价于同时开启 debug 与自动重载auto reload关闭-r, --auto-reload仅开启代码改动自动重载不改变 debug 状态关闭--access-log / --no-access-log开启/关闭访问日志视配置而定--factory将目标当作应用工厂即() - Sanic app的可调用对象处理关闭-s, --simple以简单服务器模式运行直接托管一个目录的静态内容关闭--repl启动交互式 Python shell 会话方便在应用上下文中调试关闭-1 / -3或--http 1 / --http 3选择 HTTP/1.1 或 HTTP/3 协议HTTP/1.1-u, --unix绑定到 UNIX 套接字非 Windows 平台空这些参数的默认行为均有对应测试佐证例如 tests/test_cli.py 验证了 host/port 组合的监听输出、tests/test_cli.py 验证了--workers的输出模式、tests/test_cli.py 验证了--dev会同时开启 debug 与 auto reload。此外CLI 还提供了inspect、exec、reload、shutdown、scale等管理子命令可在运行中的 Sanic 应用上进行状态检查、命令执行与进程管理详见 tests/test_cli.py 的验证用例。两种启动方式的对比除了命令行方式你还可以在脚本内直接调用app.run()if __name__ __main__: app.run(host0.0.0.0, port8000)examples/hello_world.py 采用的就是这种方式。两者的区别在于sanic server走的是独立 CLI 进程适合生产环境与 Supervisor/systemd 等进程管理器配合而app.run()则适合本地快速验证。内置服务器生产就绪这是 Sanic 与其他框架的又一个重要区别。许多框架自带开发服务器并明确声明它仅供开发使用。Sanic 恰恰相反——它自带的服务器本身就是生产就绪的。从代码结构上看Sanic 的服务端能力并非开发环境专用玩具仓库的 sanic/server 目录包含完整的 async_server.py、socket.py、runners.py 等生产级组件HTTP 协议实现在 sanic/http/http1.py 与 sanic/http/http3.py 中sanic/worker/manager.py 负责多 worker 进程的编排管理。这些模块共同支撑起一个可直接用于线上流量的 HTTP 服务器。因此你可以放心地在生产环境中直接使用sanic server启动你的应用配合--workers参数进行多进程横向扩展。引入 Sanic Extensions官方扩展生态Sanic 有意保持核心功能清单的干净与无强烈观点。项目不想强制你用某种特定方式构建应用也尽量避免规定具体的开发模式。因此许多不满足核心仓库收录标准的功能交由社区维护的第三方插件来补充。不过为了帮助 API 开发者Sanic 组织官方维护了一个名为 Sanic Extensions 的插件它提供了一系列实用能力OpenAPI文档支持 Redoc 与 Swagger 两种渲染CORS跨域保护路由处理器中的依赖注入Dependency injection请求查询参数与请求体的输入验证Validation自动创建HEAD、OPTIONS、TRACE端点预定义的、面向具体端点的响应序列化器response serializers。安装方式首选方式是把 Sanic Extensions 与 Sanic 一起安装pip install sanic[ext]在 setup.py 的extras_require中可以看到ext: [sanic-ext]正是为此定义的额外依赖组。也可以分别安装两个包pip install sanic sanic-ext自动装配机制从 v21.12 版本开始如果 Sanic Extensions 与 Sanic 处于同一 Python 环境中Sanic 会自动完成它的初始化无需手动导入。这一行为由配置项AUTO_EXTEND控制其在 sanic/config.py 中的默认值为True。自动装配的具体逻辑位于 sanic/application/ext.py 的setup_ext函数中首先检查app.config.AUTO_EXTEND为假则直接返回尝试以import_module(sanic_ext)导入插件若环境未安装则静默跳过或在failTrue时抛出带安装提示的RuntimeError导入成功后创建sanic_ext.Extend实例并挂载到app._ext上。两个新增的应用属性自动装配后你的应用实例将获得两个额外属性其实现位于 sanic/app.py1.app.extend()—— 用于主动配置 Sanic Extensionsapp.extend( extensions[MyCustomExtension], built_in_extensionsTrue, config{...}, )它允许你注册自定义扩展、开关内置扩展或传入自定义配置。注意如果_ext已存在即扩展已初始化再次调用会抛出RuntimeErrorCannot extend Sanic after Sanic Extensions has been setup.因此请在应用启动早期完成配置。2.app.ext—— 挂载在应用上的Extend实例app.ext.dependency(SomeObject())这是一个只读属性用于访问已初始化的Extend实例。如果插件未安装而强行访问会抛出带有安装提示的RuntimeError。关于 Sanic Extensions 的详细用法请参阅仓库内的官方插件文档 guide/content/en/plugins/sanic-ext/getting-started.md其中涵盖 CORS、OpenAPI、依赖注入、验证等各子主题的完整指南。总结通过本文你已经完成了 Sanic 入门的三步走安装pip install sanic确认 Python 3.10 环境编写用装饰器定义异步处理器牢记request 作第一个参数、显式返回响应两条核心约定运行使用sanic server以生产就绪的内置服务器启动应用并结合--host、--port、--workers、--dev等参数按需调整。当核心功能无法满足需求时引入sanic[ext]即可获得 OpenAPI、CORS、依赖注入、输入验证等一整套官方维护的 API 开发利器让 Sanic 在保持核心简洁的同时依然拥有完整的生产级开发体验。赞分享后端Web框架【免费下载链接】sanicAccelerate your web app development | Build fast. Run fast.项目地址https://gitcode.com/gh_mirrors/sa/sanic点击查看免费下载相关推荐ScrollScreenshot实战技巧3种拼接模式对比与最佳实践ScrollScreenshot实战技巧3种拼接模式对比与最佳实践 ScrollScreenshot是一款强大的Android滚动截图工具能够轻松捕获应用中后端Web框架Sanic 框架快速上手从 Hello World 到生产级异步 HTTP 服务Sanic 框架快速上手从 Hello World 到生产级异步 HTTP 服务 导读 本文以 Sanic 官方 README.rst https://lin后端Web框架Sanic生产环境部署终极指南10个关键步骤确保高性能Web应用Sanic生产环境部署终极指南10个关键步骤确保高性能Web应用 Sanic是一个基于Python 3.10的异步Web框架以其卓越的性能和简洁的API设后端Web框架上一篇RPA-Python与Playwright集成新一代浏览器自动化下一篇Plasmo框架用户指南提升扩展开发效率的10个必备技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表