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:
用户请求如下URL:
上述属性分别为:
<td>
<tt class="docutils literal" style="color: #222222;"><span class="pre">/page.html</span></tt>
</td>
<td>
<tt class="docutils literal" style="color: #222222;"><span class="pre">/myapplication</span></tt>
</td>
<td>
<tt class="docutils literal" style="color: #222222;"><span class="pre">//www.example.com/myapplication/page.html</span></tt>
</td>
<td>
<tt class="docutils literal" style="color: #222222;"><span class="pre">//www.example.com/myapplication/page.html?x=y</span></tt>
</td>
<td>
<tt class="docutils literal" style="color: #222222;"><span class="pre">//www.example.com/myapplication/</span></tt>
</td>
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方法访问
数据
args:ImmutableMultiDict([])
data:空字符串
files、form:都为空的ImmutableMultiDict
json:为None
mimetype:空字符串
query_string:空字符串
values:CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([])])
有参数GET方法
访问
只列出与上面无参数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方法
访问
参数为
数据,只列出与无参数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:解析之后的字典,
mimetype:’application/json’