我有一个想要添加到与任何模型都不相关的 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.
我需要几乎所有其他视图的权限类,并且不想删除它。我该如何绕过一个视图的强制属性?
您可以添加特定于视图的权限逻辑来覆盖模型权限检查。创建一个 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 权限。