参考资料:
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)