一 . 菜单展示

  

  

  

  

二 . 合并删除

  我们可以把所有的删除都合并成一个函数这样就会减少很多的代码.

  思路: 在url里面需要传两个参数,一个是要删的id 一个是名字

  

  

  

  

三 .权限展示

   我们要实现两个功能

    1. 我们点击菜单管理的一级菜单,展示所属他的所有权限.

    2. 让权限按照一级菜单的分类进行展示.

    3. 点击权限管理的二级菜单,让所属它的功能进行展开与闭合

  

  我们要想让权限按照一级菜单的分类进行展示的话,需要把二级菜单的功能放到二级菜单的children里面,这样展示起来就不会乱了顺序.

  

from django.shortcuts import render, redirect, reverse
from rbac import models
from rbac.form import RoleForm, MenuForm
from django.db.models import Q # Create your views here. def role_list(request):
all_role = models.Role.objects.all()
return render(request, 'rbac/role_list.html', {'all_role': all_role}) def role_change(request, edit_id=None):
obj = models.Role.objects.filter(pk=edit_id).first()
if edit_id:
form_obj = RoleForm(instance=obj)
else:
form_obj = RoleForm()
if request.method == 'POST':
form_obj = RoleForm(request.POST, instance=obj)
if form_obj.is_valid():
form_obj.save()
return redirect('role_list')
return render(request, 'rbac/role_add.html', {'form_obj': form_obj}) # 所有的删除都可以用下面的delete函数
# def role_del(request, del_id):
# models.Role.objects.filter(pk=del_id).delete()
# return redirect('role_list') def menu_list(request):
# 这种获取到的是all(),到前段展示的时候就需要.字段名,如果只直接筛选完的
all_menu = models.Menu.objects.all()
mid = request.GET.get('mid')
permission_id = models.Permission.objects.filter(menu_id=mid).first().id
# print(permission_id)
if mid:
# Q 是为了让二级菜单和隶属于他的功能全部展示,要不然只会展示一种
all_permission = models.Permission.objects.filter(Q(parent_id=permission_id) | Q(menu_id=mid)).values('id', 'parent_id',
'title', 'url',
'name',
'menu__title')
else:
all_permission = models.Permission.objects.all().values('id', 'parent_id', 'title', 'url', 'name',
'menu__title') permission_dict = {}
for i in all_permission:
if not i.get('parent_id'):
i['children'] = []
permission_dict[i['id']] = i
# print(i)
for i in all_permission:
pid = i.get('parent_id')
if pid:
permission_dict[pid]['children'].append(i)
# 这种传参没用用modelform的到前段循环展示的时候需要 .字段名字才可以 {{permission.name}}
return render(request, 'rbac/menu_list.html',
{'mid': mid, 'all_menu': all_menu, 'all_permission': permission_dict.values()}) def menu_change(request, edit_id=None):
obj = models.Menu.objects.filter(pk=edit_id).first() form_obj = MenuForm(instance=obj) if edit_id else MenuForm() if request.method == 'POST':
form_obj = MenuForm(request.POST, instance=obj)
if form_obj.is_valid():
form_obj.save()
return redirect('menu_list')
# 这种传参用了modelform的 到前段循环展示的时候,直接{{field}} 就可以
return render(request, 'rbac/form.html', {'form_obj': form_obj}) def delete(request, table, del_id):
# 用反射的原理,这里的models是models.py文件
table_class = getattr(models, table.capitalize())
# 这里的table_class就相当于models.表名
table_class.objects.filter(pk=del_id).delete()
return redirect(f'{table}_list')

权限展示的视图函数

  前端在循环展示权限的时候, 需要进行两次循环, 第一次是循环出二级菜单, 第二次循环出二级菜单children里面的功能,这样顺序才是我们想要的

  下面的效果就是js的点击事件功能了,点击添加, 移除类属性

  

  注意:

    

if条件里面的两个数据类型不一样,不能直接比较,从数据库中提取的是int类型, 从url中获取的是str类型,
  要把他们两个变成同一类型, 第一种方法是在后端把url获取的变成int, 第二种方法就是在前端把int类型加个safe变成字符串

Django--CRM--菜单展示, 删除合并, 权限展示的更多相关文章

  1. 巨蟒django之权限9:前端展示修改删除合并&&权限展示

    1.权限组件控制流程(硬核重点) 2.权限组件控制流程 3.角色管理 4.删除合并 5.权限展示

  2. Winform开发主界面菜单的动态树形列表展示

    我在之前很多文章里面,介绍过Winform主界面的开发,基本上都是标准的界面,在顶部放置工具栏,中间区域则放置多文档的内容,但是在顶部菜单比较多的时候,就需要把菜单分为几级处理,如可以在顶部菜单放置一 ...

  3. Saiku Table展示数据合并bug修复(二十五)

    Saiku Table展示数据合并bug修复 Saiku以table的形式展示数据,如果点击了 非空的字段 按钮,则会自动进行数据合并,为空的数据行以及数据列都会自动隐藏掉. 首先我们应该定位问题: ...

  4. Django+Ajax+Mysql实现数据库数据的展示

    最近老师让搞一个系统,仅仅展示一下数据库的数据 在做海底捞时,是交接的师兄的项目,用的语言是java,框架是SSM(Spring.SpringMVC.MyBatis),这次我准备用Python写,前端 ...

  5. django学习-27.admin管理后台里:对列表展示页面的数据展示进行相关优化

    目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看ModelAdmin类和BaseModelAdmin类的源码 2.2.第二步:查看表animal对应的列表展示页面默认的数据展示 2.3.第 ...

  6. netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源

    AntMgr https://github.com/yuzd/AntMgr 基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统 特色: 用户管理 菜单管理 角色管理 权限管理 ...

  7. netcore mvc菜单,角色,权限

    netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源 AntMgr https://github.com/yuzd/AntMgr 基于netcore2.0 mvc 开发的 快速搭建 ...

  8. 查看系统分区df,查看、设置、修改、删除ACL权限

    df [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda5 16G 1.4G 15G 9% / devtmpfs 479M 0 479M ...

  9. 以管理员身份运行 cmd 删除无权限删除的文件夹

    rd 文件夹 PS:删除空文件夹 rd /s 文件夹 PS:删除文件夹,及所有子目录和文件 rd /s/q 文件夹 PS:强制删除文件夹,及所有子目录和文件,不需要提示

随机推荐

  1. 性能优化——Android图片压缩与优化的几种方式

    图片优化压缩方式大概可以分为以下几类:更换图片格式,质量压缩,采样率压缩,缩放压缩,调用jpeg压缩等1.设置图片格式Android目前常用的图片格式有png,jpeg和webp,png:无损压缩图片 ...

  2. P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)

    技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...

  3. Linux:Day8(上) 文件系统挂载和管理工具

    文件系统管理: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载: 解除此关联关系的过程称之为卸载: 把设备关联挂载点:Mount Point ...

  4. 3D打印社区

    http://mc.dfrobot.com.cn/forum.php?mod=forumdisplay&fid=100&filter=typeid&typeid=9

  5. 转发 .Net平台下ActiveMQ入门实例 https://www.cnblogs.com/madyina/p/4121458.html

    1.ActiveMQ简介 先分析这么一个场景:当我们在网站上购物时,必须经过,下订单.发票创建.付款处理.订单履行.航运等.但是,当用户下单后,立即跳转到“感谢那您的订单” 页面.不仅如此,若果没有延 ...

  6. redis底层设计(三)——redis数据类型

    今天我们来看一下redis的数据类型.既然redis的键值对可以保存不同类型的值,那么很自然就需要对键值对的类型进行检查以及多态处理.下面我们将对redis所使用的对象系统进行了解,并分别观察字符串. ...

  7. 生产者消费者 ProducerConsumer

    生产者消费者是常见的同步问题.一个队列,头部生产数据,尾部消费数据,队列的长度为固定值.当生产的速度大于消费的速度时,队列逐渐会填满,这时就会阻塞住.当尾部消费了数据之后,生产者就可以继续生产了. 生 ...

  8. 使用git将项目上传到github

    使用git将项目上传到github(最简单方法)   首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下 ...

  9. Python-0010-

    题目: 判断101-200之间有多少素数,并输出所有素数. 程序分析: 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除则表明次数不是素数,反之是素数.用else 可以进一步简化代 ...

  10. Python学习第四篇——列表访问与判定

    avilable_foods=["soup","beaf","noddle","pepper"] request_foo ...