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