首页 > 解决方案 > Django - 'UserViewPermissionClass' 对象没有具有自定义权限的属性'authenticate'

问题描述

我正在尝试在基于类的视图中使用自定义权限。当我尝试运行我的一个视图时,我得到一个 WrappedAttributeError :'UserViewPermissionClass' object has no attribute 'authenticate'

这是我的自定义权限:

class UserViewPermissionClass(BasePermission):
    def has_permission(self, request, view):
        if request.method == 'GET':
            return request.user.is_admin
        elif request.method == 'POST':
            return True
        # default logic

class UserView(APIView):
    authentication_classes = ( UserViewPermissionClass,)  

这是我试图运行的基于类的视图:

class HandleUsers(UserView):

    def get(self, request):
        """Only for admin"""
        try:
            users = User.objects.all()
        except User.DoesNotExist():
            return HttpResponse(status=404)
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)

    def post(self, request):
        """For everyone"""
        serializer = RegistrationSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.error)

这是我对休息框架的设置:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ],
}

在做了一些研究之后,我发现我的错误可能是由于我的 DEFAULT_PERMISSION_CLASSES。但是我看不到可能会阻塞的内容。

预先感谢您的帮助。

标签: pythondjangoclasspermissionsdjango-class-based-views

解决方案


更改authentication_classes=(UserViewPermissionClass,)permission_classes=(UserViewPermissionClass,)


推荐阅读