首先,HTTP Content-Type常见的有:
1、application/x-www-form-urlencoded; charset=UTF-8
2、application/json;charset=UTF-8
3、multipart/form-data;
后端一般使用1和3,如果前端传2上来,后端request.post是获取不到数据的
解决办法:
1、获取request.body,需要判断Content-Type比较麻烦
import json
data = json.loads(request.body)
data.get('xxx')
2、安装Django Rest Framework,通过request.data获取
request.data.get('xxx', '')
一般我们选择第二种,Rest Framework还有其他很多功能,很好用,这里需要注意的是,使用了Rest Framework之后就无法读取request.body了,会报错You cannot access body after reading from request’s data stream,(Rest Framework封装问题,有兴趣的可以看下Rest Framework源码)
这时候会导致另外一个问题:
django 中间件中的request是WSGIRequest,不是rest_framework.request.Request,不能通过request.data获取数据,而request.body又不能调用了,所有会拿不到数据。
解决办法:
前端Content-Type:application/json改为application/x-www-form-urlencoded,这样中间件通过post获取数据
request.POST.get('xxx', '')