Flask get &post请求
- 一、环境描述
- [二、初始化flask 程序](#二、初始化flask 程序)
- 三、get请求
-
- [3.1 代码](#3.1 代码)
- [3.2 分析](#3.2 分析)
- [3.3 验证](#3.3 验证)
- [3.4 请求结果](#3.4 请求结果)
- 四、post请求
-
- [4.1 代码](#4.1 代码)
- [4.2 分析](#4.2 分析)
- [4.3 验证](#4.3 验证)
-
- [4.3.1 postman 请求头application/json参数](#4.3.1 postman 请求头application/json参数)
- [4.3.2 postman 请求头application/x-www-form-urlencoded参数](#4.3.2 postman 请求头application/x-www-form-urlencoded参数)
- [4.3.3 postman 请求头multipart/form-data参数](#4.3.3 postman 请求头multipart/form-data参数)
- [4.3.4 request.get_data()解析参数](#4.3.4 request.get_data()解析参数)
- 五、总结
- 六、遗留问题
一、环境描述
python:3.8.0
flask: 2.3.2
postman:9.12.2
Flask delete&put请求传送门:FLASK DELETE&PUT
二、初始化flask 程序
python
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True)
0.0.0.0: 由于我使用的是 虚拟机,所以指定同一局域网中可反问debug:开启debug模式,修改程序后会自动部署,无需重启程序
三、get请求
3.1 代码
python
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
# get 获取请求参数
@app.route('/user', methods=['GET'])
def get_user_info():
# user_name = request.args.get('user_name')
user_name = request.values.get("user_name")
# 将数据再次打包为 JSON 并传回
res = {"user_name": user_name}
return res
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True)
3.2 分析
-
限定请求只响应路径为
/user时的get请求python@app.route('/user', methods=['GET']) def method(): ...- 使用
/user限制请求响应的路径 - 使用
methods进行请求方式限定
- 使用
-
获取参数的方式
python# 获取get ?后参数的方法 request.args.get('user_name') request.values.get('user_name')
3.3 验证
-
postman 请求参数

-
postman header 如下(使用默认)

3.4 请求结果

四、post请求
4.1 代码
python
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
# post 获取请求参数
@app.route('/user', methods=['POST'])
def post_user_info():
# postman 使用默认请求头application/json
user_info = request.get_json()
res = {"user_name": user_info.get("user_name")}
# postman 使用application/x-www-form-urlencoded请求
# 注:此测试得也可解析multipart/form-data请求
# user_name = request.values.get('user_name')
# res = {"user_name": user_name}
# postman 使用multipart/form-data请求
# 注:此测试得也可解析application/x-www-form-urlencoded请求
# user_name = request.form.get('user_name')
# user_name = request.form['user_name']
# res = {"user_name": user_name}
# postman 使用上述三种都可以收到内容,但是返回值为bytes类型
# user_info = request.get_data()
# res = {"user_name": user_info.decode("utf-8")}
return res
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True)
4.2 分析
-
请求举例:http://ip:5000/user
-
限定请求只响应路径为
/user时的post请求python@app.route('/user', methods=['POST']) def method(): ...- 使用
/user限制请求响应的路径 - 使用
methods进行请求方式限定
- 使用
-
获取参数的方式有四种
request.get_json():可解析 请求头application/json的参数request.values.get('user_name'): 可解析请求头为application/x-www-form-urlencoded & multipart/form-data的参数request.form.get('user_name')&request.form['user_name']: 可解析请求头为multipart/form-data &application/x-www-form-urlencoded的参数request.get\_data():怎样的请求都可以拿到参数,但是默认初始解析返回值是bytes的对象
4.3 验证
4.3.1 postman 请求头application/json参数
-
设置参数

-
header内容

-
请求结果

4.3.2 postman 请求头application/x-www-form-urlencoded参数
-
设置参数

-
header内容

-
请求结果

4.3.3 postman 请求头multipart/form-data参数
- 设置参数

- header内容

- 请求结果

4.3.4 request.get_data()解析参数
- 请求multipart/form-data请求头内容

- 请求 application/x-www-form-urlencoded请求头内容

- 请求application/json请求头内容

五、总结
-
get请求GET把参数包含在URL中,访问时会在地址栏直接显示参数不安全,且参数大小比较小 -
post请求参数通过
request body传递,请求头的情况下需要不同的解析方式进行相关处理
六、遗留问题
- 为什么application/x-www-form-urlencoded & multipart/form-data 请求头可以相互解析相关参数?
- x-www-form-urlencoded,表单默认的 Content-type 类型,支持 ASCII-text 文本内容
- multipart/form-data,允许提交表单包含: files,non-ASCII-text,Binary 类型数据
- 参考:https://learning.postman.com/docs/sending-requests/requests/