zoukankan      html  css  js  c++  java
  • 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,再查出该用户属于哪个项目,然后根据项目查询出对应的服务器信息

  • 相关阅读:
    canvas实现音乐中的歌词播放效果
    canvas调节视频颜色
    clip API实现遮罩
    总有那么几款发型 是经典不过时的
    很多人喜欢露脚踝你觉得时尚吗?
    王者荣耀花木兰攻略解析
    十位王者给出的单排心得
    IntelliJ IDEA2017 + tomcat 即改即生效 实现热部署
    IntelliJ IDEA2017 + tomcat 即改即生效 实现热部署
    jqGrid分页查询出错
  • 原文地址:https://www.cnblogs.com/gcgc/p/14719304.html
Copyright © 2011-2022 走看看