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


    需求:

      根据不同的账号登录进来显示不同的数据,如:服务器列表,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,再查出该用户属于哪个项目,然后根据项目查询出对应的服务器信息

  • 相关阅读:
    itchat 监控微信好友撤回消息
    JAVA学习笔记(持续更新)
    go-gob序列化/反序列化与读写文件性能对比测试
    go-单元测试
    如何防范常见的Web攻击-转载
    go-读写json文件
    有关python&&c++的散碎的一些知识点_随时更新
    C Primer Plus 嵌入式裸板程序开发
    大论文格式总结(word2013)
    版本控制系统git和svn
  • 原文地址:https://www.cnblogs.com/gcgc/p/14719304.html
Copyright © 2020-2023  润新知