阿吉的Sanic教程--04请求数据

4. 请求数据

你的鼓励是我前进的动力,请为我点个赞吧!

当一个节点收到一个请求后,路由函数就传递一个请求对象(Resquest Object)。传递的参数以对象属性的方式绑定到请求对象上。

(1) json数据

sanic同样提供了为前端返回json参数的基本功能,下面通过一个例子进行说明:

from sanic.response import json
@app.route("/json")
def post_json(request):
    return json({ "received": True, "message": request.json })

sanic的直接将dict数据类型(字典)加工成json数据返回给前端,使用起来比较方便。不管是任何数据开发和都可以打包成字典类型进行返回。

(2)args(字典类型)

sanic提供了快速处理查询字符串的功能,如果字符串被解析,查询字符串将转换成字典的形式形式。以下进行简单对比:
查询字符串如下:

 ?key1=value1&key2=value2

解析后的字符串如下所示:

{'key1':燵'value1'],'key2':燵'value2']}

可以看出解析后的查询参数为列表。

(3)raw_args(原始参数)

有的时候需要获取参数原始url查询参数,与args不同的是,raw_args解析后的字典的值不是列表类型,而是简单的字符串类型,如下所示。

{'key1':'value1','key2':'value2'}

(4)file(文件对象的字典)

前端向后台发送文件时,一般都是通过列表发送的,该文件对象具有名字、类型、主体的组成部分。具体示例代码如下所示:

   from sanic.response import json
    @app.route("/files")
    def post_json(request):
        test_file = request.files.get('test')
        file_parameters = {
            'body': test_file.body,
            'name': test_file.name,
            'type': test_file.type,
        }
        return json({ "received": True, "file_names": request.files.keys(), "test_file_parameters": file_parameters })

以上代码实现将前端发送到后台的数据返回给前端数据显示。后端通过get获取参数后,进行数据文件的组合,使用文件字典对象的方式进行。

(5)form(字典对象)-表单提交

from sanic.response import json
@app.route("/form")
def post_json(request):
    return json({ "received": True, "form_data": request.form, "test": request.form.get('test') })

(6)body(bytes)

原始body这个属性可以在请求数据中获取相应的原始数据,同时可以不考虑数据类型的干扰。具体代码示例的如下所示:

from sanic.response import text
@app.route("/users", methods=["POST",])
def create_user(request):
    return text("You are trying to create a user with the following POST: %s" % request.body)

(7)其他request对象的请求参数

名称 含义
headers(dict类型) 请求头字典,其中包含所有请求头声明
method(str类型) 其中包含请求方式
ip(str类型) 请求来源ip
port(str类型) 请求者端口
socket(tuple类型) 请求者的(ip,port)
app 应用对象对象的处理函数
url 请求路由信息
scheme 请求协议(http/https)
host 请求的host(localhost:8080)
path 请求的路由例如:/A/to/B
query_string 查询字符串如“foo=bar”,或者为空字符串“”
uri_template 模版处理函数
token 用户认证的开始部分

获取请求参数要使用get或者是getlist,一般通过request的RequestParameers进行获取,需要注意的是get方法返回的是列表参数的第一个值,而getlist获取的整个列表的值,具体示例代码如下所示:

  from sanic.request import RequestParameters
  args = RequestParameters()
  args['titles'] = ['Post 1', 'Post 2']
  args.get('titles') # => 'Post 1'
  args.getlist('titles') # => ['Post 1', 'Post 2']

你可能感兴趣的:(Sanic)