python flask request属性详解

ZhangJian 2020-02-27 n次浏览 Python 编辑
from flask import request

form

一个从POST和PUT请求解析的 MultiDict(一键多值字典)。

args

MultiDict,要操作 URL (如 ?key=value )中提交的参数可以使用 args 属性: searchword = request.args.get('key', '')

values

CombinedMultiDict,内容是form和args。 可以使用values替代form和args。

cookies

请求的cookies,类型是dict。

stream

在可知的mimetype下,如果进来的表单数据无法解码,会没有任何改动的保存到这个 stream 以供使用。很多时候,当请求的数据转换为string时,使用data是最好的方式。这个stream只返回数据一次。

headers

请求头,字典类型。

data

包含了请求的数据,并转换为字符串,除非是一个Flask无法处理的mimetype。

files

MultiDict,带有通过POST或PUT请求上传的文件。

environ

WSGI隐含的环境配置。

method

请求方法,比如POST、GET。

path

获取请求文件路径:/myapplication/page.html

base_url

获取域名与请求文件路径:http://www.baidu.com/myapplication/page.html

url

获取全部url:http://www.baidu.com/myapplication/page.html?id=1&edit=edit

url_root

获取域名:http://www.baidu.com/

is_xhr

如果请求是一个来自JavaScript XMLHttpRequest的触发,则返回True,这个只工作在支持X-Requested-With头的库并且设置了XMLHttpRequest。

blueprint

蓝图名字。

endpoint

endpoint匹配请求,这个与view_args相结合,可是用于重构相同或修改URL。当匹配的时候发生异常,会返回None。

json

如果mimetype是application/json,这个参数将会解析JSON数据,如果不是则返回None。 可以使用这个替代get_json()方法。

常用方法:

print(request.method) # POST 看来可以使用这种方式来验证请求方式了
print(request.form)  # ImmutableMultiDict([('user', 'Oldboy'), ('pwd', 'DragonFire')])
# ImmutableMultiDict 它看起来像是的Dict 就用Dict的方法取值试一下吧
print(request.form["user"])  # Oldboy
print(request.form.get("pwd"))  # DragonFire
# 看来全部才对了, ImmutableMultiDict 似乎就是个字典,再来玩一玩它
print(list(request.form.keys()))  # ['user', 'pwd'] 看来是又才对了
#如果以上所有的方法你都觉得用的不爽的话
req_dict = dict(request.form)
print(req_dict)  # 如果你觉得用字典更爽的话,也可以转成字典操作(这里有坑)

request.args与request.form的区别就是: request.args是获取url中的参数 request.form是获取form表单中的参数 request.values获取formdata数据和URL中的数据(如果url和form中的Key重名的话,form中的同名的key中value会被url中的value覆盖) request.data 之 如果处理不了的就变成字符串儿存在data里面 request.files如果遇到文件上传的话,request.files里面存在的是你上传的文件,但是flask在这个文件的操作中加了一定的封装,让操作变得极为简单

<form action="/req" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>
后端:
print(request.files)  # ImmutableMultiDict([('file', <FileStorage: 'DragonFire.txt' ('text/plain')>)])
print(request.files["file"])  # <FileStorage: 'DragonFire.txt' ('text/plain')>
my_file = request.files["file"]
my_file.save("OldBoyEDU.txt")  # 保存文件,里面可以写完整路径+文件名