Django--CRM--一级, 二级 菜单表
一. 一级菜单表
1. 首先要修改权限表的字段, 在权限表下面加上icon和 is_menu 的字段

2. 展示结果

# 我们既然想要动态生成一级菜单,那么就需要从数据库中拿出当前登录的用户的菜单表是哪个,那么我们就要在验证的部分拿出is_menu的字段,看是否为True,
然后把这些数据存到session中去,这里我们最好把request.session[key]中的可以写到settings中去,这样以后修改也方便些


其他的地方要用到session的时候也直接导入settings就行
3. 然后我们需要在html文件中进行操作了, 让不同用户显示不同菜单, 这时候我们就需要用到自定义标签inclusion_tag了, 这里我们要注意两点:
1. 一定要是引入包而不是文件夹, 就是带__init__的文件的templatetags
2. 一定不要在包下的py文件中进行循环, 在模板中进行循环

4. 让选中的标签显示active的状态
在自定义标签里面获取到request.path, 然后判断菜单的路径是否是获取到的路径(用正则),
如果是,在字典里面添加属性class='active', 然后在渲染的HTML文档里面取出来


二. rbac功能整合
按照流程整合,整合成一个组件, 就是把其他的项目也能用的东西整合到一起
1. 把验证部分的代码放到rbac/service/permission.py中, 然后封装成函数,需要使用的地方可以直接调用
2. 把需要的的css样式保存在rbac项目下的static/css中
def init_permission(request, obj):
# 跨表查询用双下划线 ORM获取到权限信息 过滤掉权限为空的 去重
permission_query = obj.roles.filter(permissions__url__isnull=False).values(
'permissions__url',
'permissions__menu__title',
'permissions__menu__icon',
'permissions__menu_id',
).distinct() # 菜单字典 # 二级菜单
menu_dict = {} # 权限列表
permission_list = []
for i in permission_query:
permission_list.append({'url': i['permissions__url']}) menu_id = i.get('permissions__menu_id')
if not menu_id:
continue menu_dict.setdefault(menu_id, {
'title': i['permissions__menu__title'],
'icon': i['permissions__menu__icon'],
'children': []
})
menu_dict[menu_id]['children'].append({'title': i['permissions__menu__title'], 'url': i['permissions__url']}) # 这种可配置的东西写在settings中去
from django.conf import settings
request.session[settings.MENU_SESSION_KEY] = menu_dict
request.session[settings.PERMISSION_SESSION_KEY] = permission_list
request.session['is_login'] = True

三 . 二级菜单
1. 要新建一张表,作为一级菜单表, 然后把权限表外键到这个一级菜单表中去


2. 到admin中把新建的这张表注册一下,然后登陆admin,把权限表和一级菜单表的关系处理一下

3. 在验证登录成功后, 把需要用的东西放到session中去. 主要需要的是一级菜单的title, icon和二级菜单的title和url(上文中的init_permission函数中有获取方法)

4. 同样要用到自定义标签inclusion_tag

# menu_dict的数据是下面这样的:
{1: {'title': '客户管理', 'icon': 'fa-user', 'children': [{'title': '客户展示', 'url': '/customer/list/'}]}
# 拿value之后变成了:
{'title': '客户管理', 'icon': 'fa-user', 'children': [{'title': '客户展示', 'url': '/customer/list/'}]


菜单点击事件



Django--CRM--一级, 二级 菜单表的更多相关文章
- django权限之二级菜单
遗漏知识点 1.构建表结构时,谁被关联谁就是主表,在层级删除的时候,删除子表的时候,主表不会被删除,反之删除主表的话,字表也会被删除, 使用related_name=None 反向查询,起名用的 ...
- crm 动态一级二级菜单
之前代码菜单是写是的 如何 让他 动态 生成了 首先 添加 2个字段 admin.py 更改 显示 from django.contrib import admin from rbac import ...
- 巨蟒django之权限7:动态生成一级&&二级菜单
内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...
- 关于expanded一级二级菜单数据的分组排序
最新再弄关于expandedlistview相关的东西,所以需求是需要对一级菜单根据时间排序,同时二级菜单也需要根据时间排序,距离现在最近的时间显示在最前面. 效果就是如下: --group2 -- ...
- Django CRM系统
本节内容 业务痛点分析 项目需求讨论 使用场景分析 表结构设计 业务痛点分析 我2013年刚加入老男孩教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每 ...
- django自定义rbac权限组件(二级菜单)
一.目录结构 二.表结构设计 model.py from django.db import models # Create your models here. class Menu(models.Mo ...
- Django - 权限(3)- 动态显示二级菜单
一.动态显示二级菜单 上篇随笔中,我们实现了动态显示一级菜单,现在考虑这样一种情况,用户的菜单权限比较多,这个时候全部并列展现在左侧菜单就不合适了,所以,现在有这样一个需求,即把用户的菜单权限分类,划 ...
- Django - 权限(4)- queryset、二级菜单的默认显示、动态显示按钮权限
一.queryset Queryset是django中构建的一种数据结构,ORM查询集往往是queryset数据类型,我们来进一步了解一下queryset的特点. 1.可切片 使用Python 的切片 ...
- django中的构造字典(二级菜单,评论树,购物车)
1.构造父子结构: 1.1需求样式 客户列表 customer_list /customer/list/ -----> 添加客户 customer_add /customer/add/ ---- ...
随机推荐
- 洛谷P2845-Switching on the Lights 开关灯
Problem 洛谷P2845-Switching on the Lights 开关灯 Accept: 154 Submit: 499Time Limit: 1000 mSec Memor ...
- 【转】如何使用分区助手完美迁移系统到SSD固态硬盘?
自从SSD固态硬盘出世以来,一直都被持续关注着,SSD的性能优势让无数用户起了将操作系统迁移到SSD的心思,直接后果就是让无数机械硬盘为止黯然退场,很多软件都可以做到系统迁移,然而,被完美迁移的系统却 ...
- 【vue】vue +element 搭建项目,el-input 常用的验证
1.el-input 常用布局 <el-input class="filter-item dialog-search" size="small" @key ...
- Y7000安装驱动显卡问题
整体 https://blog.csdn.net/la9881275/article/details/86720752 详细 https://blog.csdn.net/luteresa/articl ...
- Android APP性能测试笔记(二)
(5)FPS 每秒传输帧数(Frames Per Second),每秒钟帧数愈多,所显示的动作就会愈流畅,标准的fps是60 帧数就是在1秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够 ...
- Java NIO2:NIO概述
一.概述 从JDK1.4开始,Java提供了一系列改进的输入/输出处理的新特性,被统称为NIO(即New I/O).新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对原j ...
- object detection[YOLO]
这部分,我们来聊聊YOLO. YOLO:You Only Look Once,顾名思义,就是希望网络在训练过程中,一张图片只要看一次就行,不需要去多次观察,比如滑框啥的,从而从底层原理上就减少了很多的 ...
- mybatis-plus学习笔记(一)
一.概述 概述见官网,不再赘述(简称mytatis-plus为MP) 在mybatis的基础之上,重点关注新特性:https://mp.baomidou.com/guide/#%E7%89%B9%E6 ...
- mongodb java3.2驱动 测试 一些记录
mongo驱动包 自带线程池的概念 获取 MongoClient mongoClient 后 通过客户端(mongoClient ) 获取 库操作 MongoDatabase 获取 表操作 Mongo ...
- 对写博客的n种思考
喜欢才能坚持 开始写博客的原因非常功利,功利到不好意思说. 反正你们也懂的,就那么几种. 问题是,如果心态一直这么功利,而写博客的前期回报几乎为零,情绪会变得沮丧,不知如何继续. 不过后来想想,其实做 ...