一. 一级菜单表 

  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--一级, 二级 菜单表的更多相关文章

  1. django权限之二级菜单

    遗漏知识点 1.构建表结构时,谁被关联谁就是主表,在层级删除的时候,删除子表的时候,主表不会被删除,反之删除主表的话,字表也会被删除, 使用related_name=None   反向查询,起名用的 ...

  2. crm 动态一级二级菜单

    之前代码菜单是写是的 如何 让他 动态 生成了  首先 添加 2个字段 admin.py 更改 显示 from django.contrib import admin from rbac import ...

  3. 巨蟒django之权限7:动态生成一级&&二级菜单

    内容回顾: . 权限的控制 . 表结构设计 存权限的信息 用户表 - name 用户名 - pwd 密码 - roles 多对多 角色表 - name - permissions 多对多 权限表 - ...

  4. 关于expanded一级二级菜单数据的分组排序

    最新再弄关于expandedlistview相关的东西,所以需求是需要对一级菜单根据时间排序,同时二级菜单也需要根据时间排序,距离现在最近的时间显示在最前面. 效果就是如下: --group2  -- ...

  5. Django CRM系统

    本节内容 业务痛点分析 项目需求讨论 使用场景分析 表结构设计 业务痛点分析 我2013年刚加入老男孩教育的时候,学校就一间教室,2个招生老师,招了学生后,招生老师就在自己的excel表里记录一下,每 ...

  6. django自定义rbac权限组件(二级菜单)

    一.目录结构 二.表结构设计 model.py from django.db import models # Create your models here. class Menu(models.Mo ...

  7. Django - 权限(3)- 动态显示二级菜单

    一.动态显示二级菜单 上篇随笔中,我们实现了动态显示一级菜单,现在考虑这样一种情况,用户的菜单权限比较多,这个时候全部并列展现在左侧菜单就不合适了,所以,现在有这样一个需求,即把用户的菜单权限分类,划 ...

  8. Django - 权限(4)- queryset、二级菜单的默认显示、动态显示按钮权限

    一.queryset Queryset是django中构建的一种数据结构,ORM查询集往往是queryset数据类型,我们来进一步了解一下queryset的特点. 1.可切片 使用Python 的切片 ...

  9. django中的构造字典(二级菜单,评论树,购物车)

    1.构造父子结构: 1.1需求样式 客户列表 customer_list /customer/list/ -----> 添加客户 customer_add /customer/add/ ---- ...

随机推荐

  1. 深入学习vue指令,自定义指令解决开发痛点

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code v-model指令 vue.js的定义是一个mvvm框架,将它发挥到极致能够极大的提升 ...

  2. 配置DispatcherServlet应该写/还是/*

    相亲怎么做 web应用需要放在Tomcat容器中才能启动,Tomcat容器内有一个默认的web.xml文件,在自己项目中配置的XML文件都是继承自Tomcat中的全局XML文件并重写其中相应配置,这种 ...

  3. ROS的launch文件

    ROS中可以把很多的命令以描述的形式写成launch文件,然后用roslaunch命令执行launch文件.它的使用方法如下: roslaunch [package] [filename.launch ...

  4. pytorch的backward

    在学习的过程中遇见了一个问题,就是当使用backward()反向传播时传入参数的问题: net.zero_grad() #所有参数的梯度清零 output.backward(Variable(t.on ...

  5. BuildTools Overview

    SCons Pros: Based on a full-fledged programming language, Python. This means you can make the build ...

  6. 从String.valueOf(null)说起

    同学在群问String.valueOf(null)返回啥,我看了下源码,返回"null"啊,   public static String valueOf(Object obj) ...

  7. zabbix 监控 图形化界面文字乱码解决方法

    zabbix安装后之后,很多小伙伴第一时间都是去设置中文界面,发现页面.菜单等可以正常显示中文,但是 唯有图形显示方块,无法正常显示汉字,按照百度教程,上传windows字体,修改配置文件的2处字体配 ...

  8. ind2sub

    ind2sub 线性索引的下标 语法 [I,J] = ind2sub(siz,IND)[I1,I2,I3,...,In] = ind2sub(siz,IND)   说明 ind2sub 函数确定与数组 ...

  9. 条件随机场Conditional Random Field-CRF入门级理解

    条件随机场Conditional Random Field-CRF入门级理解   有向图与无向图模型 CRF模型是一个无向概率图模型,更宽泛地说,它是一个概率图模型.现实世界的一些问题可以用概率图模型 ...

  10. HAProxy基础

    一.简介 HAProxy是由C语言编写基于事件驱动模型的一款高效稳定.功能强大的负载均衡软件,其性能可媲美商业负载均衡软件,不过在最新的版本中HAProxy已经分为社区版本和企业版,社区版完全免费,企 ...