Sanic request 请求数据 客户端发过来的HTTP请求的各类数据

鳄鱼君

发表文章数:591

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Sanic request 请求数据 客户端发过来的HTTP请求的各类数据

我们在来看一下上一篇文章的实例:

from sanic import Sanic
from sanic.response import json

app=Sanic()
@app.route('/')
async def test(request):
    msg={
        'message':'Welcome to 鳄鱼教程学习python'
    }
    return json(msg,ensure_ascii=False)
if __name__=='__main__':
    app.run(host='127.0.0.1',port=888)

你应该注意到test函数的request参数了吧,在pycharm中是没有使用的,也就是没用的,但是必须要有,没有就会报错。request包含了客户端(浏览器)发过来的HTTP请求的各类数据,下面我们来看一下具体的属性吧!

Sanic Request对象的属性

json (JSON格式数据) – JSON body

当客户端POST来的数据是json格式时,可以通过request.json来访问:

from sanic import Sanic
from sanic import response

app=Sanic()
@app.route('/json')
async def test(request):
    return response.json({"status":True,"message":request.json})
if __name__=='__main__':
    app.run(host='127.0.0.1',port=888)

args (字典) – 请求参数的变量

一个请求参数就是一个类似 ?key1=value1&key2=value2 URL 的一部分。如果都被解析了,那么 args 字典数据就是 {‘key1’: [‘value1’], ‘key2’: [‘value2’]}。 这个请求的 query_string 变量保存了未被解析的字符数据。

from sanic import Sanic
from sanic.response import json

app=Sanic()
@app.route('/')
async def test(request):
    return json({"status":True,"message":request.args,"url":request.url,"query":request.query_string})
if __name__=='__main__':
    app.run(host='127.0.0.1',port=888)

访问http://127.0.0.1:888/?name=eyujun&age=18,就会看到请求的url参数被解析了,显示的就是:

{"status":true,"message":{"name":["eyujun"],"age":["18"]},"url":"http://127.0.0.1:888/?name=eyujun&age=18","query":"name=eyujun&age=18"}

raw_args (字典)

和query_string差不多,这个的值为字典类型,query_string的值是一个列表:

{"status":true,"message":{"name":"eyujun","age":"18"},"url":"http://127.0.0.1:888/?name=eyujun&age=18","query":"name=eyujun&age=18"}

Sanic 18.12 版本已经没有 query_args 这个属性,所以还是使用raw_args比较好点。

files (File 对象的字典)

文件列表,包括 name, body, 和 type

from sanic import Sanic
from sanic import response

app=Sanic(__name__)
@app.route('/')
async def index(request):  #用于收集form表单
    html = ("""<html><body>
            <form action="/files" method="post" enctype="multipart/form-data">
            <input type="file" name="file1" /> <br />
            <input type="file" name="file2" /> <br />
            <input type="submit" value="上传" />
            </form>
            </body></html>""")
    return response.html(html)
@app.route('/files',methods=['POST'])
async def file(request):  #用于展示form表单的数据信息
    f_file=request.files.get('file1')
    f_params={
        "body":len(f_file.body),
        "name":f_file.name,
        "type":f_file.type,
    }
    return response.json({"received": True,"f_info":f_params,},ensure_ascii=False)  #支持中文输出

if __name__=='__main__':
    app.run(host='127.0.0.1',port=888)

form (字典) – 提交 form 变量

form肯定涉及到表单的提交,一般都是post请求,我们来修改一下代码:

from sanic import Sanic
from sanic import response
from sanic.response import json

app=Sanic(__name__)
@app.route('/')
async def index(request):  #用于收集form表单
    html = ("""<html><body>
            <form action="/files" method="post" enctype="multipart/form-data">
            <input type="file" name="file1" /> <br />
            <input type="text" name="title" /> <br />
            <input type="submit" value="上传" />
            </form>
            </body></html>""")
    return response.html(html)
@app.route('/files',methods=['POST'])
async def file(request):  #用于展示form表单的数据信息
    return json({"received": True,"form":request.form},ensure_ascii=False)  #支持中文输出

if __name__=='__main__':
    app.run(host='127.0.0.1',port=888)

request对象是web应用要处理的对象,它包含了客户端(浏览器)的请求数据,通过它的各种属性来访问这些请求数据。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Sanic request 请求数据 客户端发过来的HTTP请求的各类数据》 发布于2020-04-16

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

4 + 7 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册