4

私はdjango-rest-frameworkで作業しています。私が抱えている問題は、POST メソッドと GET メソッドの両方で URL が同じであるということですが、どのメソッドが呼び出されているかに応じて異なるアクセス許可が必要です。現在、クラスベースのビューを使用していますが、メソッドに応じて異なるアクセス許可を設定する方法がわかりません。私が望むのは、ユーザーが POST と GET の両方の管理者である場合、ユーザーが認証されている場合は GET しかできない場合、ユーザーが認証されていない場合は何もできないことです。

class CategoryList(generics.ListCreateAPIView):
    queryset = QuestionCategory.objects.all()
    serializer_class = QuestionCategorySerializer
    permission_classes = (permissions.IsAuthenticated,)
4

3 に答える 3

2

これを実現するために、デフォルト関数をオーバーライドする関数に記述できます。

これを行うために使用self.requestします

class CategoryList(generics.ListCreateAPIView):
    serializer_class = QuestionCategorySerializer
    permission_classes = (permissions.IsAuthenticated,)

    def get_queryset(self):
        # this function used to get queryset
        # override this to judge request method

        if self.request.method == 'POST':
            self.permission_classes = (permissions.IsAdminUser,)

        return QuestionCategory.objects.all()

get_queryset: https://docs.djangoproject.com/en/dev/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin.get_queryset

getそして、あなたはあなたの中にorpostメソッドを書くことができますgeneric view: https://docs.djangoproject.com/en/dev/topics/class-based-views/mixins/#using-singleobjectmixin-with-view

于 2014-06-04T16:02:46.210 に答える
1

私はこれがパーティーに遅れていることを知っています-しかし、私は最近同じことを理解しなければならず、ドキュメントやインターウェブでほとんど助けが見つかりませんでした. これは私が最終的に思いついたものです-同じ問題を抱えている可能性のある他の誰かに役立つことを願っています:

from request_admin.models import Rep
from request_admin.serializers import RepSerializer

from rest_framework import generics
from rest_framework import permissions
from rest_framework import mixins

from django.core.exceptions import PermissionDenied

class RepList(mixins.ListModelMixin,
                     mixins.CreateModelMixin,
                     generics.GenericAPIView):
    paginate_by = 10
    queryset = Rep.objects.all()
    serializer_class = RepSerializer

    def get(self, request, *args, **kwargs):
         return self.list(request, *args, **kwargs)


    def post(self, request, *args, **kwargs):

        if request.user.is_authenticated() == False:
            raise PermissionDenied

        return self.create(request, *args, **kwargs)

ここにユーザーオブジェクトのdjango docがあります

ここに例外のdjangoドキュメントがあります

ここにミックスインのdjangoドキュメントがあります

于 2015-01-30T16:49:44.020 に答える