码迷,mamicode.com
首页 > 其他好文 > 详细

Django:CBV模式的数据权限实现

时间:2021-04-30 12:18:25      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:不可   实现   self   重写   info   ssi   数据权限   tap   value   

需求:

  根据不同的账号登录进来显示不同的数据,如:服务器列表,A项目的人员登录只能看到自己项目的服务器数据,超级管理员能看到所有项目的数据。

@method_decorator(login_wrapper, name=dispatch)
class UATSITServerInfoList(generics.ListAPIView):
    """
    获取UAT/SIT的服务器信息
    """
    serializer_class = ServerInfoSerializers
    # 渲染数据方式
    renderer_classes = (renderers.TemplateHTMLRenderer, renderers.JSONRenderer)
    # renderer_classes = [renderers.JSONRenderer]
    template_name = UAT_SIT_server_list.html

    # 模糊匹配查询
    filterset_class = server_info_filter.ServerInfoFilter

    def get_queryset(self):
        """
        先重写get_queryset方法过滤出所需数据,不可以在list中直接给queryset赋值,否则filterset_class过滤器会失效
        :return:
        """
        # 根据用户id查出该用户是哪个项目的负责人,再查询对应项目的服务器信息
        project_id = Projects.objects.filter(project_manager_id=self.request.session[user_id]).values("id")
        project_id_list = []
        for i in list(project_id):
            project_id_list.append(i["id"])
        queryset = ServerInfo.objects.exclude(env_type="生产").filter(project_name_id__in=project_id_list).order_by(
            -update_time)
        return queryset

既然是要过滤数据,那肯定的重写get_queryset()方法,根据登录时写入的session获取到用户id,再查出该用户属于哪个项目,然后根据项目查询出对应的服务器信息

 

Django:CBV模式的数据权限实现

标签:不可   实现   self   重写   info   ssi   数据权限   tap   value   

原文地址:https://www.cnblogs.com/gcgc/p/14719304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!