在 Flask 中,request 对象用于处理 HTTP 请求。关于请求参数的获取,request 对象提供了几个不同的属性,例如 args、form、data 和 json。让我们来详细了解一下这些属性之间的区别和使用场景:
request.args:
args属性用于获取请求路径中的查询参数(即 URL 中问号后的部分)。- 例如,对于路径
/hello?name=zs,args解析出来的数据类似于一个字典,其值为{"name": "zs"}。 - 使用场景:适用于获取 GET 请求中的查询参数。
request.form:
form属性用于处理表单数据。- 当客户端通过 POST 请求提交表单数据时,这些数据会被包含在请求的正文中,并由 Flask 解析成
request.form对象。 form返回一个类似字典的ImmutableMultiDict对象,可以通过键名来获取对应的值。- 使用场景:适用于处理 POST 请求中的表单数据,特别是当请求头的
content-type是application/x-www-form-urlencoded或multipart/form-data时。
request.data:
data属性是请求体的原始数据,以字节形式表示。- 适用于处理非表单数据的情况,例如自定义的请求体格式。
request.json:
json属性用于获取 JSON 数据。- 当请求头的
content-type是application/json时,Flask 会将请求体中的 JSON 数据解析成一个 Python 字典。 - 使用场景:适用于处理包含 JSON 数据的请求。
request.values:
values属性是一个合并了args和form的结果。- 它返回一个
CombinedMultiDict对象,包含了 GET 请求参数和 POST 请求表单数据的合并结果。 - 使用场景:适用于获取所有请求参数,无论是 GET 请求的查询参数还是 POST 请求的表单数据¹²³⁴.
推荐使用 request.values.get() 来获取参数,因为它会同时考虑 GET 请求和 POST 请求的数据。如果你只关心某一种类型的数据,可以使用对应的属性来获取²。
源: 与必应的对话, 2024/4/19
(1) 理解 flask中request中form、data、json、values属性的区别 - 知乎. https://zhuanlan.zhihu.com/p/551703472.
(2) flask中获取request的参数的方法 - 年轻人——001 - 博客园. https://www.cnblogs.com/chaojiyingxiong/p/10283877.html.
(3) Flask request.form 与 request.values.get() 区别-详细内容 - 黄兵的个人博客. https://pdf-lib.org/Home/Details/13211.
(4) flask中request模块中form,args,value,files等属性 - CSDN博客. https://blog.csdn.net/yoyolearing/article/details/99568920.
(5) 关于Flask中的request方法和数据,一定要明白 - 知乎. https://zhuanlan.zhihu.com/p/623755314.
在 GET 请求中,参数直接显示在请求的 URL 中。我们可以使用以下两种方式来获取参数:
- 使用
request.args.get('key'):获取 GET 请求参数。 - 使用
request.values.get('key'):获取所有参数(包括 GET 请求和其他方式传递的参数)。
在 Flask 中,当你不确定客户端发送的是哪种 HTTP 请求时,你可以使用 request.args.get 方法来获取所有参数。这个方法适用于 GET 请求,它允许你获取 URL 中的查询参数。
以下是一些关于参数传递和请求方式的总结:
- 参数设置:
- 参数类型:
string:默认的参数类型,如果没有指定参数类型,会默认为参数是字符串类型。int:指定参数为整数类型。float:指定参数为浮点数类型。path:获取当前路径。uuid:获取 UUID 类型参数。
- 示例:
# 未指定参数类型,默认为 string 类型
@app.route('/<id>/')
def h(id):
id = int(id) ** 5
id = str(id)
return id
# 指定参数类型为 int
@app.route('/<int:id>/')
def h(id):
id = id ** 5
id = str(id)
return id
# 指定参数类型为 path
@app.route('/<path:url_path>/')
def h(url_path):
return 'path: %s' % url_path
# 指定参数类型为 uuid
@app.route('/<uuid:uu>/')
def h(uu):
return 'uu: %s' % uu- 请求方式设置:
- 默认情况下,Flask 请求是 GET 请求。如果想要指定其他请求方式,可以使用
methods参数。 - 示例:
# 指定 POST 请求方式
@app.route('/register/', methods=['POST'])
def register():
register_dict = request.form
username = register_dict['username']
password = register_dict.get('password')
# 处理用户数据并存入数据库
# ...
return '创建用户成功'- 全局变量上下文引用:
- 使用
g对象来存储全局变量,例如:
from flask import g
@app.route('/search', methods=['GET', 'POST'])
def fsearch():
if request.method == 'POST':
g.results = multiselect(request) # 处理表单数据
return 'done'
@app.route('/result', methods=['GET', 'POST'])
def fresult():
results = g.results
# 渲染结果页面
return render_template("result.html")- 传参示例:
- Cookies 传参:
# 获取 cookie
@app.route('/get_cookie')
def get_cookie():
name = request.cookies.get('passwd')
return name
# 删除 cookie
@app.route('/del_cookie')
def del_cookie():
resp = make_response('delete_cookie')
resp.delete_cookie('passwd')
return resp
# 设置 cookie
@app.route('/set_cookie')
def set_cookie():
resp = make_response('set_cookie')
resp.set_cookie('passwd', '123456')
return resp- 静态模板中传参:
<!-- test.html -->
<a href="{{ url_for('test', name=1) }}">点击这里查看</a>@app.route('/test/<name>', methods=['GET'])
def test(name):
print(name)
return render_template('/test.html')- URL 中传参:
@app.route('/tk', methods=['POST', 'GET'])
def tk():
p = request.args.get('p')
type = request.args.get('type')
print(p)
print(type)@app.route('/tk', methods=['POST', 'GET'])
def tk():
p = request.args.get('p')
type = request.args.get('type')
print(p)
print(type)¹: Flask中路由参数传递、请求方式小结 - 知乎
²: Flask 如何使用 Flask 请求传递 GET 参数 - 极客教程
³: [Flask Flask request.args.get 获取所有参数(Python) - 极客教程](https://geek-docs.com/flask/flask
源: 与必应的对话, 2024/4/19
(1) Flask中路由参数传递、请求方式小结 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/79847375.
(2) Flask 如何使用 Flask 请求传递 GET 参数 - 极客教程. https://geek-docs.com/flask/flask-questions/448_flask_how_to_pass_get_parameters_to_url_using_flask_request.html.
(3) Flask Flask request.args.get 获取所有参数(Python) - 极客教程. https://geek-docs.com/flask/flask-questions/268_flask_flask_requestargsget_get_all_params_python.html.
(4) 获取flask请求参数的几种方式_flask获取请求参数-CSDN博客. https://blog.csdn.net/DH2442897094/article/details/115955818.
(5) flask 获取GET和POST请求参数(全) - CSDN博客. https://blog.csdn.net/ling620/article/details/107562294
.










