尝试在Axios GET主体中发送数据以在Django后端中使用,但request.body的打印为空

时间:2018-11-09 17:50:35

标签: javascript django reactjs django-rest-framework axios

根据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)

2 个答案:

答案 0 :(得分:0)

如果可以修改您的API URL,请添加pos_title作为查询参数。 这样可以解决与在GET请求中发送请求正文有关的任何问题。如果必须发送请求正文,听起来您应该使用PUT请求。

答案 1 :(得分:0)

作为Keith Brewster,Axios使用XMLHttpRequest,它不支持在请求正文中发送数据。一种解决方案是按照David Ryan的建议进行操作,并将pos_title添加到部分URL中。尽管pos_title中有空格(对于我而言),但这会造成一些麻烦。

但是,就我而言,我决定在客户端进行过滤,因此保持原样并过滤响应足以解决我的问题。