Django--CRM--一级, 二级 菜单表

Posted attila

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中

 1 def init_permission(request, obj):
 2     # 跨表查询用双下划线  ORM获取到权限信息 过滤掉权限为空的 去重
 3     permission_query = obj.roles.filter(permissions__url__isnull=False).values(
 4         permissions__url,
 5         permissions__menu__title,
 6         permissions__menu__icon,
 7         permissions__menu_id,
 8     ).distinct()
 9 
10 
11     # 菜单字典  # 二级菜单
12     menu_dict = {}
13 
14     # 权限列表
15     permission_list = []
16     for i in permission_query:
17         permission_list.append({url: i[permissions__url]})
18 
19         menu_id = i.get(permissions__menu_id)
20         if not menu_id:
21             continue
22 
23         menu_dict.setdefault(menu_id, {
24             title: i[permissions__menu__title],
25             icon: i[permissions__menu__icon],
26             children: []
27         })
28         menu_dict[menu_id][children].append({title: i[permissions__menu__title], url: i[permissions__url]})
29 
30     # 这种可配置的东西写在settings中去
31     from django.conf import settings
32     request.session[settings.MENU_SESSION_KEY] = menu_dict
33     request.session[settings.PERMISSION_SESSION_KEY] = permission_list
34     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--一级, 二级 菜单表的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句,可以将各级菜单内容显示出来,格式如“一级菜单”/“二级菜单”/“三级菜单”

css+div布局,鼠标放在一级菜单上显示二级菜单

contextmenustrip 通过二级菜单的点击 怎么获取当前关联控件,是二级菜单,不是一级菜单。

到二级菜单怎样鼠标离开一级菜单后二级菜单不消失

关于css二级菜单显示, 看了一个例子, 鼠标放在一级菜单时候, 二级菜单就显示出来了

crm 动态一级二级菜单