【问题标题】:How to change permission based on request.query_params in Django rest frameworks?如何根据 Django rest 框架中的 request.query_params 更改权限?
【发布时间】:2022-01-14 14:13:32
【问题描述】:

我将两个除了权限外几乎做同样事情的视图合并在一起,我想根据以下条件更改权限:如果 company id 在参数中。如果不是,它将使用一个简单的 IsAuthenticated 类,并为 IsCompany 创建一个权限。

class FilesView(ListAPIView):
    serializer_class = FileSerializer
    permission_classes = (IsAuthenticated,)
    ...
    
    def get_queryset(self):
        if 'company' in self.request.query_params:
            # In this case I want the IsCompany Permission class
            return get_company_files(self)
        # Otherwise the regular one
        return get_personal_files(self)

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    请参阅 DRF 文档中的 custom permissions

    一个小例子:

    from rest_framework import permissions
    
    class IsCompanyRequestBasedPermission(permissions.BasePermission):
        message = '<description of your permission>'
    
        def has_permission(self, request, view):
            if 'company' in self.request.query_params:
                # Make your decision. 
    

    然后将其添加到permission_classes。它会按照您的预期工作。

    【讨论】:

      【解决方案2】:

      如果你使用

      class FilesView(ModelViewSet):
      

      而不是

      class FilesView(ListAPIView)
      

      您可以使用可以帮助您的 get_serializer_class 方法 例如

      def get_serializer_class(self):
          if "your statement":
              return "FirstSerializer"
          if "your statement":
              return "SecondSerializer"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 2016-11-20
        • 2014-08-25
        • 2016-01-25
        • 1970-01-01
        • 2019-07-13
        • 2018-11-19
        相关资源
        最近更新 更多