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"]
看页面的展示:
只有 部门 能够查看了!!
stark组件开发之列表页面预留钩子方法。 可根据用户的不同,显示不同的列的更多相关文章
- stark组件开发之列表页面定制列
先看一张页面展示的效果图: 看一看我的 model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- stark组件开发之列表页面自定义函数扩展
对于展示页面, 可能需要显示一些. 数据库中,没有的字段. 比如, 删除按钮, 编辑按钮. 这个数据库,是没有的. 所以,可能就需要, 添加一个这个东西. 比如我在渲染的时候, 给他添加两个函数进 ...
- strak组件(5):为列表定制预留钩子方法
效果图: 新增函数 def get_list_display(self): 获取页面上应该显示的列,预留的自定义扩展,例如:以后根据用户的不同显示不同的 一.stark组件 stark/servic ...
- stark组件开发之组合搜索实现思路
- 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q() 函数. 来实现. 搜索是一个大的问题点. - 要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...
- stark组件开发之添加按钮显示和URL
添加: 需求: 根据用户的权限, 决定是否,有添加按钮. 通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...
- stark组件开发之编辑功能实现
编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的 记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...
- php开发中的页面跳转方法总结
PHP页面跳转实现的功能就是将网站中一个网页跳转到另一个网页中.对于刚刚学习PHP语言的朋友来说,是必须要掌握的基础方法. 页面跳转可能是由于用户单击链接.按钮等触发的,也可能是系统自动产生的.页面自 ...
- stark组件开发之组合搜索页面效果和 URL
页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...
随机推荐
- Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务(转载6)
Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务 一.引言 今天本来没有打算写这篇文章,但是,今天测试Redis的时候发现了两个问题 ...
- C# DataTable使用方法详解--删除表数据
在项目中常常常使用到DataTable,假设DataTable使用得当,不仅能使程序简洁有用,并且可以提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 1.添加引用 1 u ...
- github学习心得。哈哈,今天上传了自己的项目!
使用github托管代码 仓库(Repository) 用来存放项目代码,每个项目对应一个仓库.如果有多个项目了就需要多个仓库 收藏(star) 仓库主页star按钮,意思为收藏项目的人数 复制克隆项 ...
- 吴裕雄 python 数据处理(3)
import time a = time.time()print(a)b = time.localtime()print(b)c = time.strftime("%Y-%m-%d %X&q ...
- servlet中的执行顺序
- hdu1753-大明A+B-(java大数)
大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- java中map接口hashMap以及Enty之间的用法和关系
java中map接口hashMap以及Enty之间的转换 首先说的是map接口: Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value ...
- Linq to sql 之 ExecuteQuery 错误:指定的转换无效
问题:通过dbContext.ExecuteQuery 得到数据并赋值给一个集合. 代码: public IEnumerable<LeaveCodeSum> GetLeavTotal(st ...
- windows 查询端口占用 杀掉进程
参考 https://www.cnblogs.com/lynn-li/p/6077993.html netstat -ano | findstr "8001" taskkill / ...
- 【Nodejs】Expressのファイルアップロード(FileUpload)のMulterについて
https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md Multer 是一个 node.js 中间件,用于处理 mult ...