如何更改当前视图的权限覆盖 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, ]
...
参考资料
如何更改当前视图的权限以覆盖 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, ]
...
参考资料