gpt4 book ai didi

django - 如何仅在特定方法上添加 django rest 框架权限?

转载 作者:行者123 更新时间:2023-12-04 02:43:17 25 4
gpt4 key购买 nike

我在用户模型的其余 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)

最佳答案

你可以写一个 custom Permission class IsPostOrIsAuthenticated 这将允许不受限制地访问 POST请求,但只允许经过身份验证的 GET要求。

实现自定义权限 IsPostOrIsAuthenticated ,覆盖 BasePermission类和实现 .has_permission(self, request, view)方法。该方法应该返回 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请求将被授予不受限制的访问权限。对于其他请求,将需要身份验证。

现在,您需要在全局设置中包含此自定义权限类。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'my_app.permissions.IsPostOrIsAuthenticated',
)
}

关于django - 如何仅在特定方法上添加 django rest 框架权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37642175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com