Django REST Framework:1つのAPIViewの中でリクエストメソッド毎にpermission_classesを分ける
1つのAPIViewの中でGETはどのユーザでもリクエストできるAllowAnyにしたいけれど、POSTとかDELETEは認証済みのIsAuthenticated、もしくは独自のパーミッションに設定したい、というケースが発生した
単純にGETだけはAllowAnyにして、他のメソッドはIsAuthenticatedにしたい場合は permission_classes = (IsAuthenticatedOrReadOnly,)
を使用すれば良い
しかし、上記の場合だと、独自で定義したパーミッションまでカバーできないので、今回は以下の方法で対応してみた
from rest_framework.views import APIView
from rest_framework.permissions import AllowAny
from hogehogehogehoge import MyCustomPermission
class MyAPIView(APIView):
def get_permissions(self):
self.permission_classes = (AllowAny, )
if self.request.method == 'DELETE':
self.permission_classes = (MyCustomPermission,)
return super(MyAPIView, self).get_permissions()
def get(self, request):
....
def delete(self, request, pk):
....
このようにすると、getメソッドは誰でもリクエストができるAllowAnyとして、deleteメソッドは独自定義した MyCustomPermission
をパーミッションとして採用することができる
他にも選択肢はある(IsAuthenticatedOrReadOnly
を拡張したり、継承したクラスを作るとか)けれど、その方法の一つとして...
Author And Source
この問題について(Django REST Framework:1つのAPIViewの中でリクエストメソッド毎にpermission_classesを分ける), 我々は、より多くの情報をここで見つけました https://qiita.com/xKxAxKx/items/a4a1b225d92ffa041793著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .