ViewSet 内のメソッドを無効にする、django-rest-framework 質問する

ViewSet 内のメソッドを無効にする、django-rest-framework 質問する

ViewSetsリスト、取得、作成、更新、削除などを自動的に行うメソッドがあります。

私はそれらの一部を無効にしたいのですが、私が思いついた解決策は、OPTIONSそれらがまだ許可されていると記載されているため、おそらく良い解決策ではありません。

これを正しく行う方法について何かアイデアはありますか?

class SampleViewSet(viewsets.ModelViewSet):
    queryset = api_models.Sample.objects.all()
    serializer_class = api_serializers.SampleSerializer

    def list(self, request):
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)
    def create(self, request):
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

ベストアンサー1

の定義はModelViewSet次のとおりです。

class ModelViewSet(mixins.CreateModelMixin, 
                   mixins.RetrieveModelMixin, 
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet)

では、 を拡張するのではなくModelViewSet、必要なものだけを使用するのはいかがでしょうか。たとえば、次のようになります。

from rest_framework import viewsets, mixins

class SampleViewSet(mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin,
                    viewsets.GenericViewSet):
    ...

このアプローチでは、ルーターは含まれているメソッドのルートのみを生成する必要があります。

参照:

モデルビューセット

アップデート: DRF 3.14.0 では、ミックスインに実装されていないメソッドの 1 つを使用すると、次のようになります405 - Method Not Allowed

Method Not Allowed: /status/
[06/Mar/2023 01:03:01] "POST /status/ HTTP/1.1" 405 41

おすすめ記事