首页 > 解决方案 > 如何为 DRF 中的方法设置不同的权限类

问题描述

我有类似的看法:

from django.http import HttpResponse
from rest_framework import generics

class MyView(generics.ListCreateAPIView):

    def get_queryset(self):
        # <view logic>
        return HttpResponse('result')

    def post(self, request):
        # <view logic x2>
        return HttpResponse('message_post_template')

而且我希望 GET 请求具有权限类,IsAuthenticated而 POST 请求应该具有HasAPIKey来自Django REST Framework API Key的权限类。我怎样才能做到这一点?

我尝试过这样做permission_classes = [IsAuthenticated | HasAPIKey],但这太宽松了,因为如果所需权限以外的其他权限可用,它将允许功能工作。

标签: pythondjangodjango-rest-framework

解决方案


from django.http import HttpResponse
from rest_framework import generics

class MyView(generics.ListCreateAPIView):

    def get_permissions(self):
        method = self.request.method
        if method == 'POST':
           return [HasAPIKey()]
        else:
           return [IsAuthenticated()]

    def get_queryset(self):
        # <view logic>
        return HttpResponse('result')

    def post(self, request):
        # <view logic x2>
        return HttpResponse('message_post_template')

参考:
https ://github.com/encode/django-rest-framework/blob/dff9759555eefef67c552f175d04bb7d8381e919/rest_framework/views.py#L274


推荐阅读