gpt4 book ai didi

python - 在 Django Rest Framework 中添加特定的方法处理程序 detail_route

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:20 24 4
gpt4 key购买 nike

我有一个使用 Django Rest Framework 构建的 API。里面有一个 ViewSetdetail_route 我正在尝试处理嵌套数据:

from rest_framework.mixins import (RetrieveModelMixin, CreateModelMixin, 
ListModelMixin)
from rest_framework.viewsets import GenericViewSet

class UserViewSet(RetrieveModelMixin, CreateModelMixin, ListModelMixin,
GenericViewSet)

...

@detail_route(methods=['get'], url_path='photos')
def photos(self, request):
return Response(self.get_photos())

@detail_route(methods=['post'], url_path='photos')
def new_photo(self, request, pk=None):
a_new_photo = Photo(user=self.request.user)
serializer = PhotoSerializer(data=request.data,
instance=new_photo)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,
status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

所以我的意图是让这个 ViewSet 处理对这样一个 url 的 GETPOST 请求:

/api/users/42/photos

GET 将返回用户 ID #42 的照片列表,POST 将向该用户添加新照片。

但是,这个 View 只处理一种方法:POST。对于 GET,它返回一个错误:

{"detail":"Method \\"GET\\" not allowed."}

如何使用 detail_route 分别处理每个 HTTP 方法?

当我为此 View 输出路由时,调试没有显示任何明显的覆盖:

Route(url=u'^{prefix}/{lookup}/photos{trailing_slash}$', mapping={'post': 'new_photo'}, name=u'{basename}-photos', initkwargs={})
Route(url=u'^{prefix}/{lookup}/photos{trailing_slash}$', mapping={'get': 'photos'}, name=u'{basename}-photos', initkwargs={})

最佳答案

一种选择是使用一个 detail_route 修饰的处理程序来处理 GETPOST 并在处理程序内部进行额外的调度:

@detail_route(methods=['get', 'post'])
def photos(self, request):
if request.method == 'POST':
return self.new_photo(request)

return Response(self.get_photos())

关于python - 在 Django Rest Framework 中添加特定的方法处理程序 detail_route,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com