flask中的request对象

请求对象request封装了从客户端发来的请求报文,我们能从他获取请求报文中的所有数据。

请求解析和响应封装实际上大部分是有werkzeug完成的,flask子类化werkzeug的请求和响应对象并添加了和程序相关的特定功能。

假设请求的url是http://just.com/hi?name=kevin, 当flask接收到请求后,请求对象会提供多个属性来获取url的各个部分,常用的属性如下:

属性
path /hi
full_path /hi?name=kevin
host just.com
host_url http://just.com/
base_url http://just.com/hi
url http://just.com/hi?name=kevin
url_root http://just.com/

除了url,请求报文中的其他信息都可以通过request对象提供的属性和方法获取,常见的如下:

属性/方法 说明
args werkzeug的immutablemultidict对象。存储解析后的查询字符串,可通过字典方式获取键值。如果需要获取未解析的原生查询字符串,可以使用query_string属性
blueprint 当前蓝本的名称
cookies 一个包含所有随请求提交的cookies的字典
data 包含字符串形式的请求数据
endpoint 与当前请求相匹配的端点值
file werkzeug的multidict对象,包含所有上传文件,可以使用字典的形式获取文件。使用的键为文件input标签中的name属性值,对应的值为werkzeug的filestorage对象,可以调用save()方法并差UN如保存路径来保存文件。
form werkzeug的immutablemultidict对象。与file类似,包含解析后的表单数据。表单字段值通过input标签的name属性值作为键获取。
values werkzeug的combinedmultidict对象,结合了args和form属性的值。
get_data(cache=True,as_text=False,parse_form_data=False) 获取请求中的数据,默认读取为字节字符串(bytestring),将as_text设为True则返回值将是解码后的unicode字符串。
get_json(self,force=False,silent=False,cache=True) 作为json解析并返回数据,如果mime类型不是json,返回None(除非force设为True);解析出错则抛出werkzeug提供的badrequest异常(如果未开启调试模式,则返回400错误响应),如果silent设为True则返回None;cache设置是否缓存解析后的json数据。
headers 一个werkzeug的environheaders对象,包含首部字段,可以以字典的形式操作
is_json 通过mime类型判断是否为json数据,返回布尔值
json 包含解析后的json数据,内部调用了get_json(),可通过字典的形式获取键值
method 请求的http方法
referrer 请求发起的源url
scheme 请求的url模式(http还是https)
user_agent 用户代理(user Agent,UA),包含了用户的客户端类型,操作系统类型等信息

werkzeug的multidict类是字典的子类,它主要实现了同一个键对应多个值的情况。比如一个文件上传字段可能会接受多个文件,这时就可以通过getlist()方法来获取文件对象列表。

immutablemultidict类继承了multidict类,但是其值是不可改变的。

需要注意的是,和普通的字典类型不同,当我们从request对象的类型为multidict或者immutablemultidict的属性(比如files,form,args)中直接使用键作为索引获取数据的时候(比如request.args[‘name’]),如果没有对应的键,那么会返回http400错误响应,表示请求无效,而不是抛出keyerror异常。为了避免这个错误,我们应该使用get()方法获取数据,并且get()方法可以设置默认值(同python中的字典)。

如果觉得写的还行,赞助瓶脉动~
0%