gpt4 book ai didi

django - 如何允许 POST 到 list_route,而不是整个 ViewSet?

转载 作者:行者123 更新时间:2023-12-04 03:22:39 28 4
gpt4 key购买 nike

我有一个 Game 模型,正在为它做相应的 REST 路由,例如GET/game, GET/game/1

我只希望 API 消费者获取现有游戏。我不希望他们能够任意发布新游戏。相反,他们应该通过特殊路线,POST/game/upload_schedule 为此。

我有以下内容:

class GameViewSet(viewsets.ModelViewSet):
queryset = Game.objects.all()
serializer_class = GameSerializer
http_method_names = ['get', 'head']

@list_route(methods=['post'])
def upload_schedule(self, request):
return Response(["foo"])

但是,当我POST/game/upload_schedule 时,我得到一个方法不允许的错误。原因是 http_method_names 阻止了它的发生。如果我将其更改为以下内容:

    http_method_names = ['get', 'head', 'post']

然后 POST/game/upload_schedule 路由起作用。但是,现在 POST/game 也是如此!

我该如何继续?

最佳答案

这是一个 XY 问题。 GameViewSet 应该只处理 Game 和专门处理游戏的事情。上传时间表不是游戏列表的属性 - 它是一条单独的路线。因此,将其设为 APIView,与 GameViewSet 分开:

class UploadSchedule(APIView):
def post(self, request):
raise NotImplementedError()

然后在 ^upload_schedule$ 下显式路由它。

关于django - 如何允许 POST 到 list_route,而不是整个 ViewSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001725/

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