2015-12-02 37 views
1

我有一种观点,我想添加到与任何模型无关的django-restframework api中。尽管我在DEFAULT_PERMISSION_CLASSES中使用了'rest_framework.permissions.DjangoObjectPermissions'。如何在使用DjangoObjectPermissions时添加一个非模型/ queryset返回视图与django-restframework?

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. 

我所需要的权限类的几乎所有其他观点,并不想摆脱它。我怎样才能避开一个视图的强制属性?

回答

2

您可以添加特定于视图的权限逻辑来覆盖模型权限检查。创建一个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权限。

更多的信息在这里:http://www.django-rest-framework.org/api-guide/permissions/#custom-permissions

相关问题