在Django里写了POST的接口,然后就开始踩坑之旅。
因为POST平时更多的是表单,所以一开始遇到了CSRF的问题,Django为了表单提交安全,默认加载了CSRF中间件,这个问题马上解决了。
接着接口上线后,按正常其他语言的POST调用,它们请求头默认的文本格式类型是
content-type : application/json
这时候通过 request.POST就取不到参数了。
查阅了相关资料,发现咱们用request.post请求,把参数放在 data= 上的,其实模拟的是一种表单提交,它的参数可以使用POST来获取,并且取到时就是字典结构,用:
request.POST.get('key',0)
就能够取到参数。
而其他语言content-type : application/json的方式其实就是相当于把参数放在 json= 上做了上传。
而其他语言要模拟表单请求的话,就需要修改请求头,用form提交:
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
然后还要拼接参数:
import qs from 'qs' body = qs.stringify(body)
如果是服务器做修改的话,就需要从request.body里取值,取到的是一个json字符串,用eval函数将之转化为表达式后,就能正常取到里面的参数了。
json_dic = eval(request.body)
key_value = json_dic['key']