首页 > 其他 > 详细

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

时间:2021-04-29 22:40:39      阅读:33      评论:0      收藏:0      [点我收藏+]

需求:

  根据不同的账号登录进来显示不同的数据,如:服务器列表,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模式的数据权限实现

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!