如何仅在特定方法上添加 django rest 框架权限?
How to add django rest framework permissions on specific method only ?
我在其余 API 中为用户模型提供了以下功能。我只想对 POST 请求设置 AllowAny 权限。谁能帮帮我。
class UserList(APIView):
"""Get and post users data."""
def get(self, request, format=None):
"""Get users."""
users = User.objects.all()
serialized_users = UserSerializer(users, many=True)
return Response(serialized_users.data)
def post(self, request, format=None):
"""Post users."""
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
http://www.django-rest-framework.org/api-guide/permissions/
按照上述 URL 你必须写一个自定义权限 class
class ExampleView(APIView):
permission_classes = (MyCustomAuthenticated,)
根据 POST 和 GET
在 MyCUstomAuthenticated 中使用 AllowAny 或 IsAuthenticated 编写您自己的逻辑
您可以编写一个 custom Permission class IsPostOrIsAuthenticated
,这将允许不受限制地访问 POST
请求,但只允许经过身份验证的 GET
请求。
要实现自定义权限 IsPostOrIsAuthenticated
,请覆盖 BasePermission
class 并实现 .has_permission(self, request, view)
方法。如果请求应该被授予访问权限,该方法应该 return True
,否则 False
。
from rest_framework import permissions
class IsPostOrIsAuthenticated(permissions.BasePermission):
def has_permission(self, request, view):
# allow all POST requests
if request.method == 'POST':
return True
# Otherwise, only allow authenticated requests
# Post Django 1.10, 'is_authenticated' is a read-only attribute
return request.user and request.user.is_authenticated
因此,所有 POST
请求都将被授予不受限制的访问权限。对于其他请求,将需要身份验证。
现在,您需要在全局设置中包含此自定义权限 class。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'my_app.permissions.IsPostOrIsAuthenticated',
)
}
我在其余 API 中为用户模型提供了以下功能。我只想对 POST 请求设置 AllowAny 权限。谁能帮帮我。
class UserList(APIView):
"""Get and post users data."""
def get(self, request, format=None):
"""Get users."""
users = User.objects.all()
serialized_users = UserSerializer(users, many=True)
return Response(serialized_users.data)
def post(self, request, format=None):
"""Post users."""
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
http://www.django-rest-framework.org/api-guide/permissions/
按照上述 URL 你必须写一个自定义权限 class
class ExampleView(APIView):
permission_classes = (MyCustomAuthenticated,)
根据 POST 和 GET
在 MyCUstomAuthenticated 中使用 AllowAny 或 IsAuthenticated 编写您自己的逻辑您可以编写一个 custom Permission class IsPostOrIsAuthenticated
,这将允许不受限制地访问 POST
请求,但只允许经过身份验证的 GET
请求。
要实现自定义权限 IsPostOrIsAuthenticated
,请覆盖 BasePermission
class 并实现 .has_permission(self, request, view)
方法。如果请求应该被授予访问权限,该方法应该 return True
,否则 False
。
from rest_framework import permissions
class IsPostOrIsAuthenticated(permissions.BasePermission):
def has_permission(self, request, view):
# allow all POST requests
if request.method == 'POST':
return True
# Otherwise, only allow authenticated requests
# Post Django 1.10, 'is_authenticated' is a read-only attribute
return request.user and request.user.is_authenticated
因此,所有 POST
请求都将被授予不受限制的访问权限。对于其他请求,将需要身份验证。
现在,您需要在全局设置中包含此自定义权限 class。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'my_app.permissions.IsPostOrIsAuthenticated',
)
}