我使用django rest框架构建api,这是我的问题
url(r'^profiles/(?P<pk>[0-9]*)', ProfileRetrieveView.as_view(), name='profiles-detail'),
url(r'^profiles/(?P<pk>[0-9]*)', ProfileUpdateView.as_view(), name='profiles-update'),
class ProfileRetrieveView(RetrieveAPIView):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
class ProfileUpdateView(UpdateAPIView):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
permission_classes = (IsAuthenticated, )
当我使用链接/ profile / 2和方法补丁查询api时,我收到405,方法不允许,只允许get方法,如何解决这个问题而无需将我的两个视图类转换为on带有GenericView Base类和Retrive + update Mixins的类。
答案 0 :(得分:1)
<强> urls.py 强>
id x y z
0 0 324 1 2
2 2 529 2 1
3 3 347 3 2
4 4 109 2 2
<强> views.py 强>
url(r'^profiles/(?P<pk>[0-9]*)', ProfileRetrieveUpdateView.as_view(), name='profiles-detail-update'),
答案 1 :(得分:0)
您应该将其压缩到一个端点中。您可以让一个类处理所有列表,更新,获取等。试试......这样的事情:
from rest_framework import mixins, viewsets
class ProfileUpdateView(viewset.ModelViewSet,
mixins.ListModelMixin,
mixins.UpdateModelMixin):
serializer_class = ProfileSerializer
permission_classes = (IsAuthenticated, )
get_queryset(self):
return Profile.objects.all()
如果您正在使用纯模型,请使用内置模型,并查看mixins。它将为您节省通用代码编写量。它有一些魔法知道如何将请求路由到匹配的http方法。
http://www.django-rest-framework.org/api-guide/generic-views/#mixins
答案 2 :(得分:0)
Django rest框架提供了不需要Mixins的通用视图。
您可以直接使用RetrieveUpdateAPIView
。提供请求方法get
以检索数据,put
更新数据和patch
以进行部分更新。
from rest_framework.generics import RetrieveUpdateAPIView
class ProfileUpdateView(RetrieveUpdateAPIView):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
permission_classes = (IsAuthenticated, )
参考:http://www.django-rest-framework.org/api-guide/generic-views/#retrieveupdateapiview