gpt4 book ai didi

python - 使用 Django 对象权限时,如何使用 django-rest 框架添加非模型/查询集返回 View ?

转载 作者:行者123 更新时间:2023-12-01 04:18:22 34 4
gpt4 key购买 nike

我有一个想要添加到我的 django-restframework api 中的 View ,该 View 与任何模型都不相关。虽然我在 DEFAULT_PERMISSION_CLASSES 中使用“rest_framework.permissions.DjangoObjectPermissions”。

class EnumChoices(views.APIView):       
def get(self, request):
enums = {}
return Response(enums)

现在 Django 提示我的观点:

AssertionError at /api/enums/
Cannot apply DjangoModelPermissions on a view that does not have `.queryset` property or overrides the `.get_queryset()` method.

我需要几乎所有其他 View 的权限类,并且不想删除它。如何绕过单一 View 的强制属性?

最佳答案

您可以添加特定于 View 的权限逻辑来覆盖模型权限检查。创建一个 BasePermission 类对象并将其添加到您的 View permission_classes 属性中。不要忘记 IsAuthenticated,除非您也想允许匿名用户。

class EnumChoices(views.APIView):
class EnumPermission(permissions.BasePermission):
def has_permission(self, request, view):
# whatever permission logic you need, e.g.
return request.user.has_perm("planning.view_enums")
permission_classes = (permissions.IsAuthenticated, EnumPermission)

def get(self, request):
enums = {}
return Response(enums)

现在 View 将确保用户经过身份验证并具有 view_enums 权限。

更多信息请点击:http://www.django-rest-framework.org/api-guide/permissions/#custom-permissions

关于python - 使用 Django 对象权限时,如何使用 django-rest 框架添加非模型/查询集返回 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34040069/

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