Flask Web开发实战:2.2-HTTP请求
1|0request对象
Flask的request对象封装了从客户端发来的请求报文,可以从它获取请求报文的所有数据
1|1获取请求URL
假设请求的URL是http://helloflask.com/hello?name=Grey,当Flask接收到请求后,请求对象会提供多个属性来获取URL的各个部分,常用的属性如下:
属性 | 值 |
---|---|
path | /hello |
full_path | /hello?name=Grey |
host | helloflask.com |
host_url | http://helloflask.com/ |
base_url | http://helloflask.com/hello |
url | http://helloflask.com/hello?name=Grey |
url_root | http://helloflask.com/ |
1|2获取其他信息
属性/方法 | 说明 |
---|---|
args | 存储解析后的查询字符串,可通过字典方式获取键值 |
blueprint | 蓝本的名称 |
cookies | 一个包含所有随请求提交的cookies的字典 |
data | 包含字符串形式的请求数据 |
endpoint | 与当前请求相匹配的端点值 |
files | 包含所有上传文件,可以使用字典的形式获取文件。使用的键为文件input标签中的name属性值,对应的值为Werkzeug的FileStorage对象,可以调用save()方法并传入保存路径来保存文件 |
form | 包含解析后的表单数据,表单字段值通过input标签的name属性值作为键获取 |
values | 结合了args和form属性的值 |
get_data(cache=True, as_text=False, parse_form_data=False) | 获取请求中的数据,默认读取为字节字符串,将as_text设为True则返回值将是解码后的unicode字符串 |
get_json(self, force=False, silent=False, cache=True | 作为JSON解析并返回数据,如果MIME类型不是JSON,返回None;解析出错则抛出BadRequest异常,如果silent设为True则返回None;cache设置是否缓存解析后的JSON数据 |
headers | 包含首部字段,可以以字典的形式操作 |
is_json | 通过MIME类型判断是否为JSON数据,返回布尔值 |
json | 包含解析后的JSON数据,内部调用get_json(),可通过字典的方式获取键值 |
method | 请求的HTTP方法 |
referrer | 请求发起的源URL,即referer |
scheme | 请求的URL模式(http或https) |
user_agent | 用户代理(User Agent),包含了用户的客户端类型,操作系统类型等信息 |
2|0request实例
2|1获取host
2|2获取查询字符串
使用get是为了防止没有name的键,而出现的400错误。没有name时,默认为Flask
3|0路由匹配
当请求的URL与某个视图函数的URL规则匹配成功时,对应的视图函数就会被调用。使用flask routes
命令可以查看程序中定义的所有路由,这个列表由app.url_map解析得到
4|0设置请求类型
在app.route()
装饰器中使用methods参数传入一个包含监听的HTTP方法的可迭代对象,比如,下面的视图函数同时监听GET请求和POST请求
5|0URL变量转换器
5|1int转换器
URL中的变量部分默认是字符串,可以将其转换为整型,比如计算时光倒流的年份
注意
转换时,int和year之间不能有空格,不能写成int: year
或者int : year
,否则会出错
5|2any转换器
匹配可选值中的一个元素,如果转换值不在可选值的范围内,会获得4040错误
等效方法,传入预定义的列表,将列表转换为字符串,作为可选值,str(colors)[1:-1])
等于'blue', 'white', 'red'
5|3内置的URL变量转换器
转换器 | 说明 |
---|---|
string | 不包含斜线的字符串(默认值) |
int | 整型 |
float | 浮点数 |
path | 包含斜线的字符串。static路由的URL规则中的filename变量就使用了这个转换器 |
any | 匹配一系列给定值的一个元素 |
uuid | UUID字符串 |
6|0请求钩子
6|1Flask请求钩子
Flask默认实现的五种请求钩子如下:
钩子 | 说明 |
---|---|
before_first_request | 注册一个函数,在处理第一个请求前运行 |
before_request | 注册一个函数,在处理每个请求前运行 |
after_request | 注册一个函数,如果没有未处理的异常抛出,会在每个请求结束后运行 |
teardown_request | 注册一个函数,即使有未处理的异常抛出,会在每个请求结束后运行。如果发生异常,会传入异常对象作为参数到注册的函数中 |
after_this_request | 在视图函数内注册一个函数,会在这个请求结束后运行 |
6|2使用方式
6|3示意图
__EOF__

本文作者:cnhkzyy
本文链接:https://www.cnblogs.com/my_captain/p/12931601.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/my_captain/p/12931601.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-05-21 python中的字符串
2018-05-21 一道问题引出的python中可变数据类型与不可变数据类型
2018-05-21 python中的列表和字典(二)
2018-05-21 python中的列表和字典(一)