准备工作
构建一个flask后端路由
@cross_origin()
@app.route('/release',methods=['GET','POST'])
def release():
print('here in')
if request.method == 'POST':
print('post')
d0 = request.values
d1 = request.form
d2 = request.args
d3 = request.get_json()
print(type(d3))
print(d0)
print(d1)
print(d2)
print(d3)
else:
print('get')
return '111'
先不加证明地给出结论
request.values = requst.args + request.form
一、用requests模块发送post请求
import requests
def tt():
post_data={
"title":"hahaha",
"content":"pass"
}
res=requests.post(url="http://localhost:5000/release",data=post_data)
print(res.text)
return
if __name__=='__main__':
tt()
可以看到结果
request.form有值,
request.args为空。
.values中对应.form的部分有值。
.get_json()返回None
二、用postman将参数挂在url中传递
结果是.form为空,.args有值。
.values中对应.args的部分有值。
.get_json()返回None
三、使用axios传递参数
在js文件中构造方法
axios({
method: 'post',
url: 'http://localhost:5000/release',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
}).then(function (response) {
console.log(response)
}).catch(function (error) {
console.log(error)
})
可以看到结果
d0,d1,d2都为空。即request.value, .form, .args都为空。
但d3=request.get_json()的结果不为空,成功解析出一个json格式的 <class ‘dict’>。
这是因为
axios的默认请求头类型为
Content-Type: application/json
即发送json格式数据。
但这项默认设置是可以修改的。(修改方法自行查找)
如果修改为
Content-Type: application/x-www-form-urlencoded
就能在request.form中读出来了。
总结
request.values = requst.args + request.form
根据传参方法的不同,需要后端开发人员自行选择正确的方式读取参数。(萌新后端玩家弄不清楚会卡很久)
由于自行分辨form和args很麻烦,大部分情况下推荐采用整合了两者的.values,
传入键名即可获得对应的值。
request.values.get(‘title’)
但值得注意的是,request.values 没有__iter__属性,即是一个不可遍历类型。
所以不能用 for k in request.values
这种写法。