共计 1882 个字符,预计需要花费 5 分钟才能阅读完成。
一、作用
获取请求报文中传递的数据
二、概述
-
浏览器发送到服务器的所有报文被 flask 接收后,创建出 request 对象,request 被用在视图函数中,获取请求的数据
-
request 对象由 flask 框架创建好,通过引入后就可以在视图中使用
-
导入
from flask import request
三、request 属性
-
url 完整的请求 URL
-
base_url 去掉 GET 参数的 URL
-
url_root 去掉了?后面的参数
-
host_url 只有主机 IP 和端口号的 URL 地址
-
host 返回主机和端口
-
path 装饰器中写的路由地址
-
full_path 去掉了 ip 和端口剩下的完整的 url
-
method 请求方法的类型
-
remote_addr 请求客户端的 IP 地址
-
remote_user 请求客户端的用户名
-
args 存储 GET 方法请求的数据
-
view_args 提取 url 中的部分值传递给视图的参数
-
form 存储 POST 方法请求的数据
-
files 用于文件上传
-
headers 存储所有到请求头信息
-
cookies 存储请求的 Cookiec
-
json 获取传递过来的 json 数据
-
cookies 存储所有请求的 cookie
示例
请求网址:http://127.0.0.1:8000/req/?a=1&b=2&c=3
from flask import request
@app.route('/req/')
def req():
# 完整的请求 URL
# return request.url
# 基本路由地址,不包括 get 参数
# return request.base_url
# 只有主机和端口号
# return request.host_url
# 只包含装饰器中的路由地址
# return request.path
# 去掉了 ip 和端口剩下的完整的 url
# return request.full_path
# 请求方法类型
# return request.method
# 客户端的 IP
# return request.remote_addr
# 获取 GET 参数
# return request.args
# 提取 url 中的部分值传递给视图的参数
# return request.view_args
# 存储所有请求的 cookie
# return request.cookies
# 获取请求头信息
return request.headers['User-Agent']
四、ImmutableMultiDict 类型对象
-
概述
request 对象中的 args、form、files 属性都是该类型的对象
是类似字典的对象,与 python 中的字典的区别在于该类型的对象用来处理一个键拥有多个值的情况
-
方法
-
get() 根据键获取值 只能获取键的一个值
注意:如果一个键有多个值,获取第一个值
-
getlist() 将键的值以列表的形式返回
-
五、获取 GET 与 POST 传参
-
get 传参使用
url:http://127.0.0.1:5000/args/?a=1&b=2&c=3&c=4
@myApp.route("/args/") def args(): a = request.args.get("a") b = request.args.get("b") clist = request.args.getlist("c") print(a, b, clist) return "获取到了 get 参数"
-
获取 POST 传参
test_post.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/post/" method="POST"> <p> 用户名:<input type="text" name="username" placeholder="输入用户名"></p> <p> 年龄:<input type="text" name="age" placeholder="输入年龄"></p> <p><input type="submit" value="提交"></p> </form> </body> </html>
视图函数
@myApp.route("/post/", methods=["POST", "GET"]) def test_post(): if request.method == 'POST' username = request.form.get("username") age = request.form.get("age") print(username, age) return username, age else: return render_template('test_post.html')