zoukankan      html  css  js  c++  java
  • stark组件开发之列表页面预留钩子方法。 可根据用户的不同,显示不同的列

    要实现,这个方法。子类中 list_diplay 这个列表, 就不能够写死。
    他应该是 可以根据。用户的不同,返回不同的值。

    所以 就需要一个函数, 可以进行判断当前用户是谁。 并且往这个列表中添加,他可以查看的东西。
    所以,我在 StartHandler 基类中。 定义了一个方法,就是用于返回。这个list_display 列表。

    class StartHandler(object):
        list_display = []
    
        def __init__(self, model_class, prve):
            self.model_class = model_class
            self.prev = prve
    
        def get_list_display(self):
            '''
            获取不同用户登录时, 页面应该显示的列. 使用时在子类中,重写该方法,指定list_display 要包含哪些值
            :return:
            '''
            value = []
            value.extend(self.list_display)
    
            return value
    
        def check_list_view(self, request):
            '''
            列表查看页面
            :param request:
            :return:
            '''
            list_display = self.get_list_display()
            # 页面要显示的列 self.list_display  示例:['name', 'age', 'depart']
    
            # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
            # self.model_class._meta.get_field('name').verbose_name
            header_list = []  # 表头
            if list_display:
                for name in list_display:
                    verbose_name = self.model_class._meta.get_field(name).verbose_name
                    header_list.append(verbose_name)
            else:
                header_list.append(self.model_class._meta.model_name)
    
            # 2. 处理 从数据库 取到的数据   # 用户访问的表  self.model_class
            data_list = self.model_class.objects.all()
    
            body_list = []
            for row in data_list:
                row_list = []
                if list_display:
                    for key in list_display:
                        row_list.append(getattr(row, key))
                else:
                    row_list.append(row)
                body_list.append(row_list)
    
            return render(request, "changelist.html",
                          {"header_list": header_list, "data_list": data_list,
                           "body_list": body_list})
    StartHandler
    def get_list_display(self):  这段代码的作用,就只是。获取到,当前这个对象的  list_display 列表然后。 返回一个列表。

    然后,列表视图函数中, 要使用这个  list_display   就掉用这个方法。 就可以了!

    完成了,这个就很容易了。  我只需要在 继承这个 基类的  子类中。 再次去重写这个  def get_list_display(self):    并且返回值是一个包含模型表中,字段的列表就可以了!

    在这里,每个 Handler 子类。 就可以分别进行。判断当前用户是谁。 并且它拥有哪些查看的权限。从而让他查看哪些内容。

    逻辑代码写在这里,就没问题了!

    比如,先来个简单的:

    class UserInfoHandler(StartHandler):
    
        def get_list_display(self):
            '''预留的自定义扩展。调用父类方法,返回一个包含 模型表字段的 列表。 并且可以根据用户的不同,显示不同的列'''
            return ["depart"]

    只返回一个  ["depart"]  

    看页面的展示:

     只有  部门 能够查看了!! 

  • 相关阅读:
    emWin模拟器Visual Studio开发时无法printf打印的问题
    双边滤波算法
    hough变换算法
    OpenCV3入门(十四)图像特效—挤压、哈哈镜、扭曲
    Canny检测算法与实现
    图像频域滤波与傅里叶变换
    OpenCV3入门(十二)角点检测
    OpenCV3入门(十一)图像直方图
    OpenCV3入门(十)图像轮廓
    一款基于SVM算法的分布式法律助手
  • 原文地址:https://www.cnblogs.com/chengege/p/10736441.html
Copyright © 2011-2022 走看看