Sanic快速入门(详细,全面,通俗易懂)

news2024/11/15 3:53:48

什么是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-urlencodedmultipart/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的基本常见的使用都介绍的差不多了,但它的功能不仅仅这些,如果你想了解更多的使用细节,可以去官网查看,最后如 果有不理解或者错误的地方,欢迎留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

平衡膳食与健康 第二篇

健康,不止于不生病. 不良的生活方式 瞎折腾 影响身体健康 实际上健康还包括在其他方面 精神方面 社会接触能力大夫问题复盘 慢性疾病,都是生活方式病 慢性病与生活方式密切相关 还有心理问题**:焦虑症,抑郁症** 健康医学和疾病医学差距 压健康状态比例 肚…

【电子通识】可靠性机理之电偶腐蚀

什么是电偶腐蚀 电偶腐蚀也叫以异金属腐蚀或接触腐蚀,是指两种不同电化学性质的材料在与周围环境介质构成回路时,电位较正的金属腐蚀速率减缓,而电位较负的金属腐蚀加速的现象。构成这种现象的原因是这两种材料间存在着电位差,形成…

【网络基础】探讨以太网:封装解包、MTU、MAC地址与碰撞

文章目录 1. 概念2. 帧格式3. 如何解包和封装4. 整体网络思想 谈 跨网络通信5. 碰撞问题① 汇总整体的网络通信过程,发现问题并补充细节 6. 认识MAC地址7. 对比理解MAC地址与IP地址8. 认识MTU① MTU对UDP协议的影响② MTU对TCP协议的影响③ MSS 与 MTU的关系④ 命令…

C语言:成绩判定

1.题目:键盘输入一个成绩(0-100之间),能输出对应等级,90-100是A,80-89是B,70-79是C,60-69是D,60分以下均为E。 2.算法思想:将100的分值分别分成5个档位&…

十万流量耀前路,成长感悟谱新章

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

计算机毕业设计选题推荐-传统文化网站-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

数据结构-单链表-详解-2

数据结构-单链表-详解-2 1.前言2.创建新结点3.头插与尾插3.1头插3.2尾插空链表找尾 4.头删与尾删4.1头删4.2尾删 1.前言 在数据结构-单链表-详解-1中,我们不仅了解了单链表的基本概念,还掌握了如何创建和打印单链表。 今天,我将详细讲解如何…

QObject::moveToThread(QThread * targetThread)

改变该对象及其孩子的所在的线程。如果该对象有父亲,则它不能被移动。 事件处理将在targetThread中继续。 移动一个对象到主线程,使用QApplication::instance()来得到当前application的指针,使用QApplication()::thread()来得到应用程序所在…

springboot篇

文章目录 1.题目问答2.配置详情2.1配置文件2.2多环境配置2.3自定义参数2.4命令行参数2.5加载顺序 3.Starter POMs4.监控与管理—actuator4.1. 应用配置类4.1.1./autoconfg4.1.2. /beans4.1.3. /configprops4.1.4 /env4.1.5./mappings4.1.6./info 4.2. 度量指标类4.2.1. /metric…

Linux终端简单配置(Vim、oh-my-zsh和Terminator)

文章目录 0. 概述1. 完整Vim配置2. Vim配置方案解释2.1 状态行与配色方案2.2 文件管理与缓存设置2.3 搜索与导航优化2.4 缩进与格式化设置2.5 粘贴模式快捷切换2.6 文件编码与格式2.7 性能优化与备份 3. 安装 Oh My Zsh 及配置3.1 安装 Oh My Zsh3.2 Oh My Zsh 配置 3. Termina…

谷歌seo为什么要分析对手?

​简单来说,找到差距,弥补差距,提升网站 通过观察对手的网站内容、关键词策略和外链情况,是可以知道很多重要信息的,只要能熟练运用各种seo工具,通过分析对手网站是可以帮助优化自己网站的,研究…

进阶SpringBoot之 Shiro(2)环境搭建

Spring Boot 创建 Web 项目&#xff0c;pom.xml 导入 Thymeleaf 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency> resources 目录下 templates 包新…

VastBase——数据库参数调优

一、内存参数调优 数据库的复杂查询语句性能非常强的依赖于数据库系统内存的配置参数。数据库系统内存的配置参数主要包括逻辑内存管理的控制参数和执行算子是否下盘的参数&#xff1a; 1.逻辑内存管理参数&#xff1a;max_process_memory max_process_memory – shared memo…

SQL Server Profiler 工具的使用

在很多时候&#xff0c;我们需要优化接口的执行效率&#xff0c;一方面是提高代码在内存中的执行效率&#xff0c;另一方面就是提高数据库操作相关的效率了。 .NET中在System.Diagnostics类库下提供了Stopwatch类用来分析代码的执行耗时。那么如果是牵扯到数据库相关的操作&am…

前端速通面经八股系列(一)—— CSS篇

CSS高频面经目录 一、CSS基础1. CSS选择器及其优先级2. CSS中可继承与不可继承属性有哪些3. display的属性值及其作用4. display的block、inline和inline-block的区别5. 隐藏元素的方法有哪些6. link和import的区别7. transition和animation的区别8. display:none与visibility:…

Beyond Compare 4试用过期规避办法

声明: 支持正版软件 一: 注册表处理 在搜索栏中输入 regedit &#xff0c;打开注册表 删除项目&#xff1a;计算机\HKEY_CURRENT_USER\Software\ScooterSoftware\Beyond Compare 4\CacheId 二: 脚本处理 创建bat文件, 写入下面的命令行. reg delete “HKEY_CURRENT_USER\…

华为od全面介绍!!!

三分钟带你全面了解华为OD 【合同及管理】签约方为科锐国际/外企德科&#xff08;人力服务公司&#xff09;&#xff0c;劳动合同期为4年&#xff0c;试用期6个月。员工关系合同管理、五险一金、考勤发薪由科锐国际/外企德科负责&#xff1b;定级定薪、员工培训、工作安排、绩…

Redis的配置和启动+Redis Insight连接

一、安装 Redis的安装&#xff1a;从镜像站下载&#xff1a;索引 redis-local (huaweicloud.com)&#xff0c;然后将其传到Linux虚拟机中进行解压&#xff0c;解压之后需要下载gcc&#xff0c;因为Redis底层是用c写的&#xff0c;所以要编译一下生成redis文件&#xff0c;然后…

人工智能领域正经历模型规模变革,小型语言模型(SLM)崛起,挑战“规模至上”观念。

在人工智能领域&#xff0c;一场关于模型规模的深刻变革正在悄然发生。长久以来&#xff0c;科技巨头们热衷于庞大语言模型&#xff08;LLM&#xff09;的开发竞赛&#xff0c;但如今&#xff0c;小型语言模型&#xff08;SLM&#xff09;正以其独特的优势逐步崭露头角&#xf…

麦弗逊悬架KC特性分析APP开发与应用

汽车悬架系统是汽车重要的组成部分之一&#xff0c;起到支撑车身、减震降噪、提高行驶稳定性等多种作用。其中&#xff0c;悬架系统的K&C特性是一个重要指标&#xff0c;直接影响到汽车的操纵稳定性和乘坐舒适性&#xff0c;是悬架系统设计和优化的关键目标之一。 图1 汽车…