django-rest-framework:通用视图和基于方法的权限

django-rest-framework: generic view and method-based permission

是否可以将身份验证仅应用于通用视图的一种方法?我有一个通用的 ListCreateAPIView,我想对 get 方法应用身份验证,并且只在 IsAuthenticated 时授予权限,但让 post 方法在没有身份验证的情况下响应?

在基于函数的视图中,这可以通过为每个方法添加装饰器来轻松完成。但我不知道如何使用基于 class 的视图。

一种方法是编写自定义权限:

from rest_framework.permissions import IsAuthenticated
from rest_framework import generics

class IsAuthenticatedNotPost(IsAuthenticated):
    def has_permission(self, request, view):
        if request.method == 'POST':
            return True
        return super(IsAuthenticatedNotPost, self).has_permission(request, view)

class SomeView(generics.ListCreateAPIView):
    permission_classes = (IsAuthenticatedNotPost, )