小能豆

使用 DjangoObjectPermissions 时,如何使用 django-restframework 添加非模型/查询集返回视图?

py

我有一个想要添加到与任何模型都不相关的 django-restframework api 的视图。虽然我在 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.

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


阅读 5

收藏
2024-12-21

共1个答案

小能豆

您可以添加特定于视图的权限逻辑来覆盖模型权限检查。创建一个 BasePermission 类对象并将其添加到视图 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_enums 权限。

2024-12-21