Django Rest framework学习(一)

本文探讨了在使用Django REST Framework时遇到的类视图问题,包括DELETE方法缺少参数导致的问题及如何通过增加权限类解决DjangoModelPermissions错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料:

http://www.django-rest-framework.org/tutorial/3-class-based-views/

      今天开始学习django rest framework,找了一个中文版的和官方网站结合着看,顺便再pycharm中创建了例子中的项目。序列化,视图函数,类视图这些都比较好理解,看了他的例子,也能很快明白,在用类视图的时候遇到了两个问题,找了好久才发现问题所在

1.

delete 不成功,这是成功之后的截图

 

def delete(self, pk, format=None):
        data_old = self.get_object(pk)
        data_old.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

调试的时候,发现根本进入不到这个函数中,这就很奇怪了,delete函数就是对应着DELETE按钮的,然后又对了对官网的例子,发现delete函数少了个参数,request, 加上之后就可以了,看来request这个参数不能少啊

 

 

def delete(self, request, pk, format=None):
        data_old = self.get_object(pk)
        data_old.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)


2. AssertionError: Cannot apply DjangoModelPermissions on a view that does not have `.model` or `.queryset` property

 

 

class DataDetail(APIView):
    """
    新建,更新,删除
    """

    permission_classes = (permissions.IsAuthenticated,)   # 加入这一行就可以解决上述问题

    def get_object(self, pk):
        try:
            data = TestData.objects.get(pk=pk)
        except TestData.DoesNotExist:
            raise Http404
        return data


    def get(self, request, pk, format=None):
        data = self.get_object(pk)
        serializer = TestDataSerializer(data)
        return Response(serializer.data, status=status.HTTP_200_OK)


    def put(self, request, pk, format=None):
        data_old = self.get_object(pk)
        data = TestDataSerializer(data_old, data=request.data)
        if data.is_valid():
            data.save()
            return Response(data.data, status=status.HTTP_205_RESET_CONTENT)
        return Response(data.errors, status=status.HTTP_400_BAD_REQUEST)


    def delete(self, request, pk, format=None):
        data_old = self.get_object(pk)
        data_old.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值