2015-12-02 40 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

相關問題