如何更改当前视图的权限覆盖 django rest-framework 中的 DEFAULT_PERMISSION_CLASSES

how to change permissions for current view overriding the DEFAULT_PERMISSION_CLASSES in django rest-framework

如何更改当前视图的权限以覆盖 django rest-framework

中的 DEFAULT_PERMISSION_CLASSES

这是我在 settings.py 中设置默认权限的方法:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',  # <-- And here
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

我需要在 signUp 方法上使用 AllowAny :

@permission_classes([AllowAny,])
@api_view(["POST", ])
def add_new_user(request):
    if request.method == "POST":
        lang = request.data["lang"]
..........
.........
.......

不过,它 returns Authentication credentials were not provided. .. 我主要需要对每个请求都有令牌权限,但不是注册和登录请求。怎么做??

这是我解决这个问题的方法:

在我的 settings.py 中我添加了两个权限 类

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',  # <-- And here
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',  #both are mentioned 
        'rest_framework.permissions.AllowAny',
    ]
}

在我的 view 中,我不得不将权限独裁者移到视图本身之前的最后一件事。

@api_view(["POST", ])
@permission_classes([AllowAny])
def login_user(request):
    if request.method == "POST":
        lang = request.data["lang"]
...

一种方法是在 Django 中使用对象级权限。 您只需在 settings.py 中像往常一样设置并手动向每个 class 视图添加权限。 对我来说是最好的方法。通常是视图 是仅管理员、已验证或仅打开。

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication', 
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoObjectPermissions',#Object Level Permission
        
    ]
}

将此行设置到您的 settings.py 后,只需将 permission_classes 添加到视图中即可。喜欢:

class LoginUser(APIView):
    permission_classes = [AllowAny, ]
    ...

参考资料

DjangoObjectPermissions

Django Class Based Views