[英]Trying to send data in the body of a Axios GET to use in Django backend, but print of request.body is empty
根据 Axios,这应该是可能的:
https://github.com/axios/axios/issues/462#issuecomment-252075124
我有以下内容并且pos_title
确实有一个值。
export function getQuery(pos_code, id) {
if (id === 94) {
var strArray = pos_code.split(' - ');
pos_code = strArray[0];
var pos_title = strArray[1];
}
return function(dispatch) {
axios.get(
`${URL}/api/survey/${(id)}/results/${(pos_code)}/`,
{
headers: {
'Content-Type': 'application/json',
'Authorization': 'JWT ' + sessionStorage.getItem('token')
},
data: {
body: pos_title
}
}
)
.then(response => {
dispatch({
type: QUERY,
payload: response.data
})
})
.catch(error => {
console.log(error);
})
}
}
在对应的views.py
, print(body_data)
为空:
class GetQueryDataAPIView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request, *args, **kwargs):
data = {'id': request.user.id}
if kwargs:
data['survey_id'] = kwargs.get('survey_id')
data['pos_code'] = kwargs.get('pos_code')
if data['survey_id'] == 94:
body_unicode = request.body.decode('utf-8')
body_data = json.loads(body_unicode)
print(body_data)
serializer = GetQueryDataSerializer(data=data)
if serializer.is_valid(raise_exception=True):
return Response(serializer.data, status=HTTP_200_OK)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
如果可以修改您的API URL,请添加pos_title作为查询参数。 这样可以解决与在GET请求中发送请求正文有关的任何问题。 如果必须发送请求正文,听起来您应该使用PUT请求。
作为Keith Brewster,Axios使用XMLHttpRequest,它不支持在请求正文中发送数据。 一种解决方案是执行David Ryan的建议,并将pos_title
添加到部分URL中。 如果在pos_title
中有空格(在我的情况下),这会造成一些麻烦。
但是,就我而言,我决定在客户端进行过滤,因此保持原样,并过滤响应就足以解决我的问题。
对于任何遇到相同问题的人,我将使用您的代码发布回复:
您必须为获取请求提供参数,例如。
export function getQuery(pos_code, id) {
if (id === 94) {
var strArray = pos_code.split(' - ');
pos_code = strArray[0];
var pos_title = strArray[1];
}
return function(dispatch) {
axios.get(
`${URL}/api/survey/${(id)}/results/${(pos_code)}/`,
{
headers: {
'Content-Type': 'application/json',
'Authorization': 'JWT ' + sessionStorage.getItem('token')
},
params: {
'title': pos_title
}
}
)
}
}
在 django 第一部分中可以得到 query_params 如下:
def get(self, request, *args, **kwargs):
title = request.query_params['pos_title']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.