Sanic框架请求与响应实例分析
作者:喷跑的豆子 发布时间:2023-05-26 00:07:00
本文实例讲述了Sanic框架请求与响应。分享给大家供大家参考,具体如下:
前面介绍了Sanic框架的路由,这里接着介绍Sanic框架的请求与响应。
简介
Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快。除了Flask之外,Sanic还支持异步请求处理程序。这意味着你可以使用Python 3.5中新的闪亮的异步/等待语法,使你的代码非阻塞和快速。
前言:Sanic最低支持Python 3.5,如果需要学习Sanic,请先下载版本不低于3.5的Python包
请求数据
当一个端点收到一个HTTP请求时,路由功能被传递到一个request对象。以下变量可以作为request对象的属性访问:
json:JSON数据
@app.route("/post_data",methods=["POST"])
async def post_data(request):
# 将打印传递过来的JSON数据
print(request.json)
return text("it is ok!")
args:查询字符串变量。查询字符串是类似于URL的部分
?name=laozhang&age=20
。如果URL被解析,那么args字典将如下所示:{"name":["laozhang"],"age":[20]}
raw_args:在许多情况下,我们需要获取压缩程度低的字典中的url参数。对于之前的
URL?name=laozhang&age=20
,raw_args
字典将如下所示:{"name":"laozhang","age":20}
file:文件对象字典,具有名称,正文和类型的文件列表
@app.route("/post_file_data",methods=["POST"])
async def post_file_data(request):
info = request.files.get("file")
print(info.name)
print(info.type)
print(info.body)
return text("it is ok!")
form:表单数据,form字典将如下所示:
{"name":["laozhang"]}
@app.route("/post_form_data",methods=["POST"])
async def post_form_data(request):
name = request.form.get("name")
return text("it is ok!")
body:原始数据。无论内容类型如何,该属性都允许检索请求的原始数据。
byte
类型headers:获取请求表头的不区分大小写的字典。
dict
类型ip:IP地址,
str
类型port:端口,
str
类型socket:请求者的IP地址和端口,(IP地址,端口)。
tuple
类型app:对处理请求的Sanic应用程序对象的引用。
@appr.route("/get_app_info")
async def get_app_info(request):
print(request.app.config)
return text("it is ok!")
url:请求的完整URL,如:http://localhost:5000/get_app_info
scheme:获取与请求关联的URL方案:
http
或https
host:获取与请求关联的主机
path:获取请求的路径,如:
/get_app_info
query_string:获取查询的字符串,如:
name=zhangsan
或者为一个空白字符串uri_template:获取匹配路由处理程序的模板,如:
/get/<id>
token:授权标头的值
get与getlist
当我们访问一个GET请求,并传入相关参数时,如下的请求:
@app.route("/get_info")
async def get_info(request):
print(request.args.get("name"))
print(request.args.getlist("name")
return text("it is ok!")
当我们传入一个name
为laozhang
时,在上面有提到,args字典将会是{"name":["laozhang"]
,所以,访问上面的路由,将会打印如下结果:
laozhang
["laozhang"]
响应
使用sanic.response
模块中的函数来创建响应
纯文本:
from sanic.response import text
@app.route("/text")
async def get_text(request):
return text("it is text response!")
HTML:
from sanic.response import html
@app.route("/html")
async def get_html(request):
return html("<p>it is html!</p>")
JSON:
from sanic.response import json
@app.route("/json")
async def get_json(request):
return json({"name":"laozhang"})
FILE:
from sanic.response import file
@app.route("/file")
async def get_file(request):
return await file("/xx/aa/abc.png")
切记,不能少了await
关键字
STREAM:
from sanic.response import stream
@app.route("/stream")
async def get_stream(request):
async def stream_fn(response):
response.write("abc")
response.write("def")
return stream(stream_fn,content_type="text/plain")
文件流:针对大文件,上面文件与流的组合
from sanic.response import file_stream
@app.route("/file_stream")
async def get_file_stream(request):
return await file_stream("/xx/aa/abc.png")
切记,不能少了await
关键字
重定向:
from sanic.response import redirect
@app.route("/redirect")
async def get_redirect(request):
return redirect("/json")
RAW:未编码的body响应
from sanic.response import raw
@app.route("/raw")
async def get_raw(request):
return raw(b"it is raw data")
访问此接口后,将会立即下载一个名为raw
的文件,里面包含内容it is raw data
修改请求头和状态值:如果需要修改请求头和状态值,请将headers
和status
参数传递给上面这些函数,下面以json
为例
from sanic.response import json
@app.route("/json")
async def get_json(request):
return json({"name":"老张"},headers={"age":18},status=403)
访问此接口后,会发现原来本应是200的状态值变成了403,而且请求头信息中增加了{"age":18}
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/y472360651/article/details/80140822


猜你喜欢
- [mail function] ; For Win32 only. SMTP = mail3.focuschina.com smtp_por
- 项目有时要用一些Ajax的效果,因为比较简单,也就没有去用什么Ajax.net之类的东西,手写代码也就实现了。、第二天,有人反馈错误;说是只
- 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的
- 什么是nodejs?Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,nodejs允许javascri
- python的format函数通过{}来格式化字符串>>> a='{0}'.format(123)>
- 1、Node.js的单线程 非阻塞 I/O 事件驱动在 Java、PHP 或者.net 等
- 一、关系数据库1.数据模型实体间的关系分为以下有三种:1*)一对一模型一对一(one-to-one)关系模型用二维表格表示数据及数据联系,是
- 如果你看到别人写trim函数是用循环而不用正则表达式来写,请不要取笑,也许,他们就是高手。如果你很自信你的trim函数效率很高,请看完本文再
- 小编最经常的工作是将一些项目的数据从数据库导出,然后分门别类的列到excel表格中,领导看起来眼花缭乱。小编想,要是能以图表可视化展现出来,
- python函数一、函数定义函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你
- Microsoft SQL Server 2000复制的概念:在数据库之间对数据和数据库对象进行复制和分发并进行同步以确保其一致性的一组技术
- 通常来说,Python的变量/数据类型非常多,但是它是不需要用户指定的,因为有些是根据部份系统函数生成,另外一些是自动根据变量的值识别的,这
- 聚合函数作用于一组数据,对那组数据返回一个值count :统计结果记录多少条数,max:统计最大值min:统计最小值sum:计算求和avg:
- __getitem__ 来看个简单的例子就明白:def __getitem__(self, key): return self.data[k
- 前言又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool。下面话不多说了,来一起看看详细的介绍吧。先准备好:12306网站
- 0.前言Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但是,它
- 本文实例讲述了PHP实现mysqli批量执行多条语句的方法。分享给大家供大家参考,具体如下:可以一次性的执行多个操作或取回多个结果集。实例:
- 一、背景交通大数据是由交通运行管理直接产生的数据(包括各类道路交通、公共交通、对外交通的刷卡、线圈、卡口、GPS、视频、图片等数据)、交通相
- 本文实例讲述了Python微信企业号文本消息推送功能。分享给大家供大家参考,具体如下:企业号的创建、企业号应用的创建、组、tag、part就
- css的流行导致了标签的流行,很直观,看起来很清爽。流行的一部分,还有很多种功能强大且美观的导航。。。1. Change.org2. N.D