无法从Django获取POST数据(从React发送)

时间:2017-11-02 08:54:42

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

我花了好几个小时来解决这个问题。问题是我无法发送POST的正文数据。我从服务器收到500错误。

这是我对React Native的HTTP请求(我认为我可能有错误的axios请求)。 http主体可能有问题吗?

export const createCloth = (token, hType, clothObject) => async dispatch => {
  let headers = { 'Authorization': `JWT ${token}`};
  if(hType==1) {
    headers = { 'Authorization': `JWT ${token}`};
  } else if (hType==2) {
    headers = { 'Authorization': `Bearer ${token}`};
  }

  let {image, text, clothType, ... , onlyMe} = clothObject;

  console.log(text); <- printing ok
  console.log(bigType); <- printing ok

  let response = await axios.post(`${ROOT_URL}/clothes/create/`, {

    text, clothType, ..., onlyMe
  }, {headers});

  console.log(response.data); <<< 500 HTTP error

这是我的Backend API的一部分。

class ClothCreateAPIView(APIView):
    def post(self, request, format=None):
        # Create Cloth
        # self.request.POST.get('user_id')
        print('--------REQUEST-------')
        print(request)


        logged_in_user = self.request.user
        content = self.request.POST.get('text')
        cloth_type = self.request.POST.get('clothType')
         only_me = self.request.POST.get('onlyMe')
        ...
        print('----------PRINTING CLOTH CONTENT')
        print(logged_in_user) <- printing my username (GOOD)
        print(cloth_type) <- printing None always (BAD)
        print(content) <- printing None always (BAD)
        print(self.request.POST) <- prints <QueryDict: {}>

在最后两行,他们为什么总是打印无?我来回检查这些语法超过二十次。这太令人沮丧了

self.request.POST.get(&#39; somthing&#39;)语法没有错,但它之所以不起作用的原因是我们在 axios请求的语法上有问题

2 个答案:

答案 0 :(得分:9)

默认情况下,axios将请求数据序列化为json。您可以使用json.loads对其进行反序列化。

import json
data = json.loads(request.body.decode('utf-8'))

或者,如果您想使用request.POST,请参阅[axios docs]了解以application/x-www-form-urlencoded格式发送数据的选项。

答案 1 :(得分:2)

如果您使用djangorestframework来构建视图,则应通过request.data而不是request.POST访问数据。 DRF会自动为您解析json,并允许您访问类似于期望request.POST的字典。

这也适用于与request.POST不同的其他http方法。

this answer