本文实例讲述了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/

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("

it is html!

")

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程序设计有所帮助。

python sanic 向别的服务器发送post请求_Sanic框架请求与响应实例分析相关推荐

  1. c#向服务器发送消息,C#模拟httpwebrequest请求_向服务器模拟cookie发送

    public classMyRequest {#region 辅助方法 static string HttpGet(stringurl) {var request =(HttpWebRequest)W ...

  2. python函数结构图_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  3. python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析

    本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...

  4. python图片解析库_python用来获得图片exif信息的库实例分析

    本文实例讲述了python用来获得图片exif信息的库用法.分享给大家供大家参考.具体分析如下: exif-py是一个纯python实现的获取图片元数据的python库,官方下载地址: http:// ...

  5. python中flush什么意思_python flush()定义及作用详解(实例分析)

    今天这篇文章我们来了解一下python之中的flush,在进入文章之前我们首先要知道我们要学的是什么东西,今天讲的是pythonflush,了解什么是flush,并且知道flash什么意思.这些东西我 ...

  6. python中pass的含义_python中pass语句意义与作用(实例分析)

    想必大家都是刚刚才开始接触python这门语言的,今天这篇文章就来带大家来了解一下python这门语言之中常常会用到的一个语句pass语句.想必大家都很好奇python中pass作用是什么,接下来我就 ...

  7. python实现因子分析及用于综合评分且配上碎石图(实例分析)

    由于感觉因子分析不是很懂,因此又通过python把 因子分析(factor analysis)案例(matlab实现) 这题又给打了一遍. 这里加上了碎石图,用来选择辅助选择因子个数,但是我感觉这里没 ...

  8. php udp发送和接收_php socket通信(tcp/udp)实例分析

    本文实例讲述了php socket通信(tcp/udp)方法.分享给大家供大家参考,具体如下: 注意 1.在socket_bind的时候ip地址不能真回环地址如127.0.0.1 2.server.p ...

  9. Java Web 请求转发与请求重定向

    Java Web 请求转发与请求重定向 请求转发 服务器行为,即用户向服务器发送了一次http请求,该请求可能会经过多个信息资源处理以后菜返回给用户,各个信息资源使用请求转发机制互相转发请求,但是用户 ...

最新文章

  1. php打印文件目录结构,php和java关于目录树(列出某一目录下文件结构)
  2. LYNC显示用户位置的相关配置
  3. 如何在CSMAR中找到不同公司,不同时间的数据呢?
  4. Bootstrap CustomBox 弹层
  5. java调用ole ie_ActiveX (.ocx)的写法,及在IE里调用
  6. 如何分割合并ISO文件
  7. Leetcode--416. 分割等和子集
  8. 计算机小故障排除方法,常见电脑故障排除方法总汇【详解】
  9. 监控openfire数据
  10. 深度学习训练出来的损失不收敛_学习率设置技巧,使用学习率来提升我们的模型...
  11. LightGBM参数调优代码详解
  12. 多线程等待/通知机制
  13. 有关使用seajs和template模板的总结
  14. 书matlab电子,MATLAB电子仿真与应用教程 第3版.pdf
  15. 深信服 云桌面 linux,极域深信服云桌面专用版
  16. ArcGIS聚类分析
  17. PPT学习笔记和技巧分享【持续更新ing】
  18. 计算机专业今日份例句
  19. 北邮计算机学院复试笔试,北邮计算机学院考研复试经验
  20. 亚马逊linux密码,Linux、Centos、Ubuntu亚马逊服务器开启密码远程,启用root账号

热门文章

  1. java ui调试_如何使用 IBM i System Debugger 调试 Java 程序
  2. 思科服务器与交换机链接配置文件,使用思科S系列交换机上的配置迁移工具转换配置文件...
  3. python编程300例_经典编程100例——python版(例75)
  4. mos管电路_【鼎阳硬件智库原创︱电源】 MOS管驱动电路的设计
  5. 将源码包打包成RPM包
  6. ping连接linux无法访问目标主机,无法访问目标主机是什么情况【解决方法】
  7. 如何设置电脑锁屏时间_电脑如何设置多屏显示?多屏显示的设置方法
  8. java语言只保留了什么_java语言的保留的关键字【小白必读】
  9. macappstore登不上去_荣耀亲选一度登机箱----一个安静得想放进大侄子的magic box
  10. 前端html5的框架有哪些,10大html5前端框架