Flask get &post请求
- 一、环境描述
- 二、初始化flask 程序
- 三、get请求
- 3.1 代码
- 3.2 分析
- 3.3 验证
- 3.4 请求结果
- 四、post请求
- 4.1 代码
- 4.2 分析
- 4.3 验证
- 4.3.1 postman 请求头application/json参数
- 4.3.2 postman 请求头application/x-www-form-urlencoded参数
- 4.3.3 postman 请求头multipart/form-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 程序
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 代码
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 分析
-
请求举例:http://ip:5000/user?user_name=neil
-
限定请求只响应路径为
/user
时的get
请求@app.route('/user', methods=['GET']) def method(): ...
- 使用
/user
限制请求响应的路径 - 使用
methods
进行请求方式限定
- 使用
-
获取参数的方式
# 获取get ?后参数的方法 request.args.get('user_name') request.values.get('user_name')
3.3 验证
-
postman 请求参数
-
postman header 如下(使用默认)
3.4 请求结果
四、post请求
4.1 代码
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
请求@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/