遗漏知识点

1.构建表结构时,谁被关联谁就是主表,在层级删除的时候,删除子表的时候,主表不会被删除,反之删除主表的话,字表也会被删除,

使用related_name=None   反向查询,起名用的

之前使用表名小写+__set.all()  使用related_name=None 就直接使用别名.all()不再使用表名小写+__set方法了

2.如果项目使用多个数据库的话,要在seeing中的DATABASE中新增数据库,在default下使用app的名字配置数据库

django权限之二级菜单

操作步骤:

1.更改表结构

class Menu(models.Model):
title = models.CharField(max_length=32, verbose_name='菜单')
icon = models.CharField(max_length=32, verbose_name='图标', null=True, blank=True) class Permission(models.Model):
"""
权限表
"""
title = models.CharField(max_length=32, verbose_name='标题')
url = models.CharField(max_length=32, verbose_name='权限')
menu=models.ForeignKey("Menu",on_delete=models.CASCADE,null=True) ###注意:设置null为true是为了辨别那个路径是菜单权限!

2.把当前登录的用户二级菜单权限信息注入到session中

  1.查询当前登录人的所有权限

permissions = Role.objects.filter(user=user).values("permissions__url",
"permissions__title",#拿到用户的权限名
"permissions__menu__title",#拿到二级菜单的菜单名
"permissions__menu__icon",#拿到二级菜单的图标
"permissions__menu__pk").distinct()#拿到二级菜单的pk
permission_list = []#所有权限列表
#二级菜单以及菜单权限的结构思路:
  以pk值为键,以菜单的title和icon为值
  菜单权限列表套字典
permission_menu_dict ={}
for item in permissions:
# 构建权限列表,拿到权限
permission_list.append(item["permissions__url"]) # 菜单权限
menu_pk=item["permissions__menu__pk"]
if menu_pk:       #如果构建的权限字典中没有pk键,进行添加值
if menu_pk not in permission_menu_dict: permission_menu_dict[menu_pk]={
"menu_title":item["permissions__menu__title"],
"menu_icon":item["permissions__menu__icon"],
           #菜单权限
"children":[
{
"title":item["permissions__title"],
"url":item["permissions__url"],
}
], }
    #如果有pk的话,就证明之前添加过一个权限菜单,再次添加的时候会覆盖掉之前的菜单权限
else:
      #使用append方法就能解决覆盖的现象
permission_menu_dict[menu_pk]["children"].append({
"title": item["permissions__title"],
"url": item["permissions__url"],
})
    
# 将当前登录人的权限列表注入session中
request.session["permission_list"] = permission_list
# 将当前登录人的菜单权限字典注入session中
request.session["permission_menu_dict"] = permission_menu_dict

3.获取二级菜单的信息menu.html

<div class="multi-menu">

    {% for item in permission_menu_dict.values %}#循环构造的菜单权限字典,拿到字典的值

       <div class="item">
#把图标,文本,进行渲染
<div class="title"><i class="{{ item.menu_icon }}"></i>{{ item.menu_title }}</div>
<div class="body">
#循环取值
{% for foo in item.children %}
<a href="{{ foo.url }}">{{ foo.title }}</a>
{% endfor %} </div>
</div>
{% endfor %} </div>
#拿到菜单权限的数据web.py
from django.utils.safestring import mark_safe
from django.template import Library
import re
register =Library()
@register.inclusion_tag("rbac/menu.html")
def get_menu_styles(request):
permission_menu_dict = request.session.get("permission_menu_dict")
print("permission_menu_dict",permission_menu_dict)
return {"permission_menu_dict":permission_menu_dict}

4.渲染页面

#前端渲染页面,被继承的页面layout.html
{% load web %}
{% get_menu_styles request %}

django权限之二级菜单的更多相关文章

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

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

  2. RABC权限控制(二级菜单实现)

    目前大部分系统由于用户体验,基本上菜单不会做的很深,以二级菜单为例,做了一个简单的权限控制实现,可精确到按钮级别(基于django),下面具体看看实现 1.表结构的设计 无论开发什么都需要先梳理清楚需 ...

  3. django权限二(多级菜单的设计以及展示)

    多级权限菜单设计级标题栏 我们现在只有数据展示,要进入其他url还需要手动的输入路径,非常的麻烦,所以我们要设计 一个导航栏以及侧边多级菜单栏,这个展示是通过stark组件的设计的增删改查页面,而 每 ...

  4. django 权限设置 左侧菜单点击显示,面包屑

    1.左侧菜单点击显示 就是在点击的时候保留点击的功能 方法. 1.加入新的字段,pid来判断 class Permission(models.Model): """ 权限 ...

  5. python 全栈开发,Day109(客户管理之动态"二级"菜单)

    昨日内容回顾 1. 权限有几张表? 2. 简述权限流程? 3. 为什么要把权限放入session? 4. 静态文件和模块文件 5. 相关技术点 - orm查询 - 去空 - 去重 - 中间件 - in ...

  6. Django权限控制进阶

    一.一级菜单的排序 我们用字典存放菜单信息,而字典是无序的,当一级菜单过多时可能会出现乱序情况,因此需要给一级菜单排序 1.给一级菜单表的model中加一个weight权重的字段 ,权重越大越靠前 w ...

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

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

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

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

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

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

随机推荐

  1. java操作solr

    <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</a ...

  2. delphi SetWindowPos改变窗体位置和状态

    http://blog.163.com/yuanliaofan@126/blog/static/1730690722012534428814/ delphi SetWindowPos改变窗体位置和状态 ...

  3. 40 insert语句的锁

    40 insert语句的锁 上一篇文章中对mysql自增主键锁做了优化,尽量在申请到自增id后,就释放自增锁. 因此,insert语句是一个很轻量的操作,不过,这个结论对于”普通的insert”才生效 ...

  4. Zotero引用文献格式(软件学报)

    最近在写一篇综述,要处理大量引用文献,选用Zotero作为文献管理工具.在插入参考文献目录时需要遵循格式,奈何网上找不到<软件学报>对应的csl模板文件,所以决定自己动手修改.在此记录下自 ...

  5. Android.应用软件.常用程序下载地址_20190913

    1. 1.1. 健康友行 微信 官网 https://weixin.qq.com/ 抖音 chrome 百度网盘(账号:osskill)中有 1.2. 支付宝 官网 https://mobile.al ...

  6. [Python3 填坑] 003 关键字?保留字?预留字?

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 问题的由来 2.2 网上搜索 2.3 结论 2.4 后记 1. print( 坑的信息 ) 挖坑时间:2019/01/04 明细 坑的编 ...

  7. Spring IoC,IoC原理

    一.IoC概念及原理 IOC的别名:依赖注入(DI) 2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他 ...

  8. sublime text3插件安装及使用

    sublime官网下载地址:http://www.sublimetext.com/ 我用的是SubLime text3,插件安装命令地址:https://packagecontrol.io/insta ...

  9. 【洛谷p1970】花匠

    莫得致敬lz谢谢.lz的题解是优秀的题解谢谢! 看算法标签 但是我并不会DP的思路,用一个很神奇的码量超级少的代码(虽然我码了超多),然后其实这个数据可以看做是一个函数嘛对吧:(比如说样例) 那么要注 ...

  10. [2019杭电多校第五场][hdu6630]permutation 2

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6630 题意为求出1-n,n个数的全排列中有多少种方案满足第一位为x,第n位为y,且相邻数字绝对值之差不 ...