无法访问Django中request.data中的Post请求数据

时间:2018-07-24 15:02:02

标签: django angular django-rest-framework

访问Angular服务器发送的发帖请求数据时遇到很多困难。不知何故,Response(data)仍然可以准确地返回我的发帖请求的主体,但是我无法访问其中的内容来创建模型实例。 下面是我的代码

角端:

let header = new HttpHeaders({
  'Authorization': ' JWT ' + this.authToken,
  'Content-Type': 'application/json',
});

let body = {
  "var1": var1,
  "var2": var2,
};

return new Promise(resolve => {
  this.http.post(this.server, body, {headers: header, withCredentials: true}).subscribe(data => {
    console.log(data);
    resolve(data);
  }, err => {
    console.log(err);
  });
});

Django

@api_view(['POST'])
@parser_classes((JSONParser,))
def order_processing(request):
    permission_classes = (permissions.IsAuthenticated,)
    data = request.data
    item = Item.create(data["var1"])
    item.save()
    return Response(data)

并且我总是最终得到错误:

TypeError at /post/↵create() missing 1 required positional argument:

我认为是由于data [“ var1”]不可用。项目是我的自定义模型。

class Item(models.Model):
    # Fields
    var1 = models.TextField(editable=False)

    # Methods
    def __str__(self):
        return self.var1

    def create(self, var1):
        order = self.create(var1=var1)
        return order

在我的本地主机上,我尝试使用httpie进行请求,而Querydict和request.data均为空。但是部署的服务器上的Response(data)仍然能够返回正确的主体,因此我不知道它到底是什么问题。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的那样-您的create方法不是classmethod。因此,您不能像以前那样称呼它。因为只能在实例上调用它。

但是,创建工作不会像您希望的那样进行。

执行此操作:

  1. 从模型中删除创建方法
  2. 您认为
  3. 这样做:  item = Item.objects.create(var1=data['var1'])

这将创建项目。

还有另一件事: 您的permission_classes什么也没做。

相反,导入装饰器:

from rest_framework.decorators import permission_classes

并将其更改为:

@api_view(['POST'])
@permission_classes((permissions.IsAuthenticated,))
@parser_classes((JSONParser,))
def order_processing(request):
   ....