什么是sanic
官网介绍:Sanic是一个Python 3.8+的web服务器和web框架,旨在快速运行。它允许使用Python 3.5中添加的async/await语法,这使得您的代码无阻塞且快速
Sanic最早由ChannelCat团队开发,旨在提供一个高性能的异步Web框架。其灵感来自于Flask,并在异步编程的基础上进行了优化。Sanic利用Python3.5引入的async/await语法,使得开发者可以编写快速且高效的异步Web应用程序
简单来说,sanic是内置了服务器的web框架,这和java中的spring boot框架有点像。
官网地址:https://sanic.dev
python的web对比
python的web框架种类众多,但使用率最高的主要是Django ,Flask和FastAPI
1. Django
特点:高层次的Python Web框架,鼓励快速开发和简洁的设计。
优点:自带ORM、强大的管理后台、用户认证系统、自动生成的管理界面等。
适用场景:适用于需要快速开发、拥有丰富功能和需要强大后端管理的项目。
2. Flask
特点:一个轻量级的Web框架,非常适合小型应用和微服务。
优点:高度可扩展,易于学习和使用,具有丰富的扩展插件。
适用场景:适用于小型项目、微服务架构和需要定制化的应用。
3. FastAPI
特点:用于构建API的现代、快速(高性能)Web框架,基于Python 3.6+类型提示。
优点:高性能、自动生成文档(Swagger UI 和 ReDoc)、支持异步编程。
适用场景:适用于需要高性能和自动生成文档的API项目
4. Sanic
特点:一个轻量级,高性能,异步的Web框架
优点:易于学习和使用,支持Python 3.5中添加的async/await语法,速度快
适用场景:适用于小型项目、且对响应速度要求高。
排名 语言 版本 speed(64) speed(256) speed(512)
从图中可以看出,sanic框架的响应速度是远远高于其他框架的,所以对于那些轻量级,且对响应速度有要求的框架,使用sanic是非常不错的一个选择
快速入门
安装
pip install sanic
创建一个简单的应用
from sanic import Sanic
from sanic.response import text
app = Sanic("MyHelloWorldApp")
@app.get("/")
async def hello_world(request):
return text("Hello, world.")
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, access_log=False)
运行python代码出现如上sanic的图标就代表运行成功了
sanic的请求
Request请求:
因为Sanic是一个异步框架,所以处理程序将在asyncio内部运行任务,并将由事件循环调度。这意味着处理程序将在孤立的上下文中执行,并且请求对象对于该处理程序的任务来说是唯一的
JSON(接收json传参)
Body(接收请求体传参)
request.body 用于处理原始请求体,适用于非表单数据(如JSON、XML等)
Form(接收表单数据)
request.form 用于处理表单数据,自动解析application/x-www-form-urlencoded
和multipart/form-data
类型的请求体,并提供一个易于访问的接口
Uploaded (接收文件)
sanic的响应
所有处理程序通常返回一个响应对象,中间件也可以选择返回一个响应对象。
除非处理程序是一个流式端点,处理它自己的向客户端发送字节的模式,否则返回值必须是一个sanics .response. httpresponse的实例
最基本的返回
但通常我们不会直接返回一个httpresponse的实例,而是将实例封装到方法里返回
Text(返回文本)
HTML (返回Html)
JSON(返回Json数据)
File(返回文件)
File Streaming(返回流文件)
Redirect(请求重定向)
sanic的路由
sanic的路由其实和其他web开发一样,也是支持各种方法,使用起来也十分的简单
如上图就是不同的方法对应的使用的修饰器来实现,有点类似于java中springmvc的注解
注意:这里需要注意的地方是方法名和路径必须是唯一的,不能够重复,否则会在启动的时候报错
Restful风格的路由
更多细节使用细节可以查看官网的文档
sanic的蓝图(重点)
蓝图是可用于应用程序中的子路由的对象。蓝图没有向应用程序实例添加路由,而是定义了类似的方法来添加路由,然后以灵活且可插入的方式将其注册到应用程序中
简单点说蓝图相当于是一个子路由,我们可以把方法请求方法写在蓝图中,最后把蓝图注册到应用中,那么蓝图中的方法就会被应用识别和接管
蓝图快速入门
声明一个蓝图
from sanic import Blueprint,text
bp = Blueprint('route')
@bp.get('/haha')
async def haha(request):
return text("Haha, this is a test route.")
注册蓝图到主服务中并启动
访问测试结果
输出访问路径可以正常范文,那么就代表蓝图没啥问题了
蓝图组(进阶)
蓝图也可以作为列表或元组的一部分注册,注册器将递归地循环遍历蓝图的任何子序列并相应地注册它们
api/
├──content/
│ ├──authors.py
│ ├──static.py
│ └──__init__.py
├──info.py
└──__init__.py
app.py
声明authors蓝图
声明 static蓝图
将 authors和static注册他一个蓝图组中(content组)
在声明一个info蓝图
把info和content蓝图组都注册到蓝图组api中
最后把api蓝图图注册到应用中,这样蓝图组里面定义的方法就会被app(应用接管和识别)
访问路径=蓝图组前缀+蓝图前缀+路由
info == /api/info/
static == /api/content/satic
访问结果:
到这里sanic的基本常见的使用都介绍的差不多了,但它的功能不仅仅这些,如果你想了解更多的使用细节,可以去官网查看,最后如 果有不理解或者错误的地方,欢迎留言