一.问题描述
postman测试flask POST类型接口无论传入什么参数都返回如下:
我的代码如下:
from flask import Flask
from flask import request
import json
app = Flask(__name__)
@app.route('/passport/user/post/login',methods=['POST'])
def login():
request_method = request.method
if request_method == 'POST':
#request.form获得post请求参数
username = request.form.get("username")
password = request.form.get("password")
print(username,password)
if(username and password):
data = json.dumps({
'code' : 0,
'username' : username,
'password' : password,
'message' : '登录成功'
},ensure_ascii=False)
# return data
else:
data = json.dumps({
'code' : 1,
'message' : '输入参数错误'
},ensure_ascii=False)
return data
# return data
else:
data = json.dumps({
'code' : 1,
'meaasge' : '请求类型应为POST'
},ensure_ascii=False)
return data
if(__name__ == '__main__'):
app.run()
二.问题解决
1.对代码做断点调试,发现获取到的参数一直为空,所以总是进入else分支
感觉是获取参数的方式不对
2.因为我传入的是json数据,尝试更改代码如下:
json_data = json.loads(request.get_data().decode('utf-8'))
username = json_data.get("username")
password = json_data.get("password")
postman再次请求,
三.问题总结
request请求多种,主要是GET/POST;
request传参方式不同,有json数据,url参数,form-data数据等
所以根据不同的请求类型和传参方式,获取参数的方式是不同的
1.post请求
1)url参数
可以获取参数的方式是:request.args,request.values
2)json参数
可以获取参数的方式是:request.get_data()(Content-Type: application/json)
3)body form-data参数(能上传文件)(相当于HTTP请求中的multipart/form-data)
可以获取参数的方式是:request.form和request.values
4)body x-www-form-urlencode(只能是以键值对的形式传参,不能上传文件)(相当于HTTP请求中的application/x-www-from-urlencoded)
可以获取参数的方式是:request.form和request.values
2.get请求
1)url传参
可以获取参数的方式是:request.args,request.values
2)json参数
可以获取参数的方式是:request.get_data()
3)body form-data参数(能上传文件)
可以获取参数的方式是:request.form
4)body x-www-form-urlencode(只能是以键值对的形式传参,不能上传文件)
可以获取参数的方式是:request.form