Flask请求数据

目录

Flask 中使用 Request 表示请求数据,其中有多种成员变量表示输入的请求数据,不同 HTTP 请求会使用不同的变量。下面首先按文档介绍 Request 的成员变量,然后通过几个例子分别研究下 Request 中包含的数据。

Request成员变量

form

MultiDict 类型,从 POST 或 PUT 请求数据解析而来。上传的文件不在这里,保存在 files 属性中。

args

MultiDict 类型,从 query string 解析而来(URL中问号后面的部分)

values

CombinedMultiDict 类型,包含 form 和 args。

cookies

dict类型,请求附带的 cookie。

stream

如果输入表单数据没有编码为已知的 mimetype,数据将不加修改地保存在这个stream中。通常,使用 data 属性返回数据字符串。stream属性只可以返回数据一次。

headers

dict类型,请求头

data

字符串形式保存请求数据,以免 Flask 无法识别。

files

MultiDict类型,POST 或 PUT 请求上传的文件。每个文件保存为 FileStorage 对象,基本与标准文件相同,但有 save() 函数可以将其保存到文件系统中。

environ

WSGI 环境

method

当前请求方法(POST、GET等)

url相关

path
script_root
url
base_url
url_root
提供不同方法访问当前URL。
假设应用监听如下URL:

//www.example.com/myapplication

用户请求如下URL:

//www.example.com/myapplication/page.html?x=y

上述属性分别为:

path/page.html
script_root/myapplication
base_url//www.example.com/myapplication/page.html
url//www.example.com/myapplication/page.html?x=y
url_root//www.example.com/myapplication/

is_xhr

当前请求由 JavaScript XMLHttpRequest 触发时,值为 True。

blueprint

当前 blueprint 名字。

endpoint

匹配请求的 endpoint。与 view_args 配合可以重建或修改URL。匹配发生异常时,返回None。

get_json(force=False, silent=False, cache=True)

解析输入JSON请求数据并返回。如果解析失败,会调用请求对象的 on_json_loading_failed() 函数。默认该函数只加载 mimetype 为 application/json 的json数据,但可以通过 force 属性修改。
参数:
force:设置为True,忽略miemtype。
silent:设置为False,该方法会安静失败并返回False。
cache:设置为True,解析后的JSON会被保存到请求中。

json

如果mimetype是 application/json,则会包含解析后的 JSON 数据。否则为None。应该使用 get_json() 代替。

max_content_length

MAX_CONTENT_LENGTH 配置键

module

不推荐使用,使用 blueprints 代替。

on_json_loading_failed(e)

当 JSON 数据解析失败时调用,默认抛出 BadRequest 异常。

routing_exception = None

如果URL匹配失败,该属性是抛出的异常。通常为NotFound或其他异常。

url_rule = None

匹配请求的URL规则。

view_args = None

dict类型,包含匹配请求的view函数参数。如果匹配发生异常,则为None。

示例

无参数GET方法

GET方法访问

//127.0.0.1:5000/api/v1/repos/nwp_xp/nwp_cma20n03/info

数据
args:ImmutableMultiDict([])
data:空字符串
files、form:都为空的ImmutableMultiDict
json:为None
mimetype:空字符串
query_string:空字符串
values:CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([])])

有参数GET方法

访问

//127.0.0.1:5000/api/v1/records?count=20&node_path=%2F&page=1&repo=nwp_cma20n03

只列出与上面无参数GET方法不一样的数据:
args:ImmutableMultiDict([(‘count’, u’20’), (‘repo’, u’nwp_cma20n03′), (‘page’, u’1′), (‘node_path’, u’/’)])
query_string:count=20&node_path=%2F&page=1&repo=nwp_cma20n03
values:CombinedMultiDict([ImmutableMultiDict([(‘count’, u’20’), (‘repo’, u’nwp_cma20n03′), (‘page’, u’1′), (‘node_path’, u’/’)]), ImmutableMultiDict([])])

JSON作为参数的POST方法

访问

//127.0.0.1:5000/api/v1/repos/nwp_xp/nwp_cma20n03/info

参数为

{"repo":{"current_version_id":3,"repo_description":"sms log for operation system at nwp@cma20n03","repo_id":3,"repo_location":"/cma/u/nwp/smsworks/sms/cma20n03.sms.log","repo_name":"nwp_cma20n03","user_id":1}}

数据,只列出与无参数GET方法不同的数据:
data:字符串数据:
‘{“repo”:{“current_version_id”:3,”repo_description”:”sms log for operation system at nwp@cma20n03″,”repo_id”:3,”repo_location”:”/cma/u/nwp/smsworks/sms/cma20n03.sms.log”,”repo_name”:”nwp_cma20n03″,”user_id”:1}}’
json:解析之后的字典,

{u'repo': {u'repo_id': 3, u'user_id': 1, u'repo_description': u'sms log for operation system at nwp@cma20n03', u'current_version_id': 3, u'repo_location': u'/cma/u/nwp/smsworks/sms/cma20n03.sms.log', u'repo_name': u'nwp_cma20n03'}}

mimetype:’application/json’