热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

rbac组件之菜单操作(三)

菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来、菜单的添加、删除、修改。urls.pyre_path(r^menusl

菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来、菜单的添加、删除、修改。

urls.py

...re_path(r'^menus/list/$', MenuView.as_view(), name='menus_list'),re_path(r'^menus/add/$', MenuAddView.as_view(), name='menus_add'),re_path(r'^menus/edit/(?P\d+)/$', MenuEditView.as_view(), name='menus_edit'),re_path(r'^menus/dell/(?P\d+)/$', MenuDelView.as_view(), name='menus_del'),...

1、后台处理菜单列表页

class MenuView(View):def get(self,request):menu_queryset=Menu.objects.all()pid=request.GET.get('pid')if pid:root_permission_queryset = Permission.objects.filter(menu_id=pid).values('id', 'title', 'url', 'name', 'parent_id','menu__title')else:root_permission_queryset = Permission.objects.filter(menu_id__isnull=False).values('id', 'title', 'url', 'name', 'parent_id','menu__title')# print('permission_queryset',root_permission_queryset)
all_root_permission_queryset=Permission.objects.all().values('id', 'title', 'url', 'name', 'parent_id')root_permission_dict={}for row in root_permission_queryset:if not row['parent_id']:root_permission_dict[row['id']]={'id':row['id'],'title':row['title'],'name':row['name'],'url':row['url'],'menu_title':row['menu__title'],'children':[]}for row in all_root_permission_queryset:parent_id=row['parent_id']if parent_id in root_permission_dict:root_permission_dict[parent_id]['children'].append({'id':row['id'],'title':row['title'],'name':row['name'],'url':row['url']})print(root_permission_dict)return render(request,'rbac/menu_list.html',{'menu_queryset':menu_queryset,'root_permission_dict':root_permission_dict,'pid':pid})

将每一个菜单及其权限取出来,组成相应的数据结构

{64: {'id': 64,'name': 'rbac:multi_permissions','menu_title': '权限管理','title': '批量添加权限','children': [],'url': '/rbac/multi/permissions/'},1: {'id': 1,'name': 'stark:crm_userinfo_changelist','menu_title': '权限管理','title': '用户列表','children': [{'id': 2,'name': 'stark:crm_userinfo_add','title': '添加用户','url': '/stark/crm/userinfo/add/'}, {'id': 3,'name': 'stark:crm_userinfo_change','title': '修改用户','url': '/stark/crm/userinfo/(?P\\d+)/change/'}, {'id': 4,'name': 'stark:crm_userinfo_del','title': '删除用户','url': '/stark/crm/userinfo/(?P\\d+)/del/'}, {'id': 78,'name': 'stark:crm_userinfo_reset_pwd','title': '重置密码','url': '/stark/crm/userinfo/reset/password/(?P\\d+)/'}],'url': '/stark/crm/userinfo/list/'},66: {'id': 66,'name': 'login','menu_title': '其它','title': '登陆','children': [],'url': '/login/'},99: {'id': 99,'name': 'stark:crm_order_customer_order','menu_title': '客户管理','title': '个人订单列表','children': [{'id': 100,'name': 'stark:crm_paymentrecord_changelist','title': '个人账单列表','url': '/stark/crm/paymentrecord/list/(?P\\d+)/'}, {'id': 102,'name': 'stark:crm_paymentrecord_change','title': '修改个人账单','url': '/stark/crm/paymentrecord/(?P\\d+)/(?P\\d+)/change/'}, {'id': 103,'name': 'stark:crm_paymentrecord_del','title': '删除个人账单','url': '/stark/crm/paymentrecord/(?P\\d+)/(?P\\d+)/del/'}, {'id': 105,'name': 'stark:crm_paymentrecord_add','title': '添加个人账单','url': '/stark/crm/paymentrecord/add/(?P\\d+)/'}],'url': '/stark/crm/order/customer/order/list/'},37: {'id': 37,'name': 'stark:crm_productparameter_changelist','menu_title': '产品管理','title': '产品参数列表','children': [{'id': 38,'name': 'stark:crm_productparameter_add','title': '添加产品参数','url': '/stark/crm/productparameter/add/'}, {'id': 39,'name': 'stark:crm_productparameter_change','title': '修改产品参数','url': '/stark/crm/productparameter/(?P\\d+)/change/'}, {'id': 40,'name': 'stark:crm_productparameter_del','title': '删除产品参数','url': '/stark/crm/productparameter/(?P\\d+)/del/'}],'url': '/stark/crm/productparameter/list/'},65: {'id': 65,'name': 'rbac:distribute_permissions','menu_title': '权限管理','title': '分配权限','children': [],'url': '/rbac/distribute/permissions/'},49: {'id': 49,'name': 'stark:crm_productaudit_changelist','menu_title': '产品管理','title': '产品审核列表','children': [],'url': '/stark/crm/productaudit/list/'},72: {'id': 72,'name': 'index','menu_title': '其它','title': '主页','children': [],'url': '/index/'},9: {'id': 9,'name': 'stark:crm_customer_per_changelist','menu_title': '客户管理','title': '个人客户列表','children': [{'id': 10,'name': 'stark:crm_customer_per_add','title': '个人客户添加','url': '/stark/crm/customer/per/add/'}, {'id': 11,'name': 'stark:crm_customer_per_change','title': '个人客户修改','url': '/stark/crm/customer/per/(?P\\d+)/change/'}, {'id': 12,'name': 'stark:crm_customer_per_del','title': '个人客户删除','url': '/stark/crm/customer/per/(?P\\d+)/del/'}, {'id': 84,'name': 'stark:crm_order_add','title': '添加客户订单','url': '/stark/crm/order/add/(?P\\d+)/'}, {'id': 85,'name': 'stark:crm_order_change','title': '修改客户订单','url': '/stark/crm/order/(?P\\d+)/(?P\\d+)/change/'}, {'id': 86,'name': 'stark:crm_order_del','title': '删除客户订单','url': '/stark/crm/order/(?P\\d+)/(?P\\d+)/del/'}, {'id': 88,'name': 'stark:crm_consultantrecord_per_add','title': '添加客户咨询记录','url': '/stark/crm/consultantrecord/per/add/(?P\\d+)/'}, {'id': 89,'name': 'stark:crm_consultantrecord_per_change','title': '修改客户咨询记录','url': '/stark/crm/consultantrecord/per/(?P\\d+)/(?P\\d+)/change/'}, {'id': 90,'name': 'stark:crm_consultantrecord_per_del','title': '删除客户咨询记录','url': '/stark/crm/consultantrecord/per/(?P\\d+)/(?P\\d+)/del/'}, {'id': 91,'name': 'stark:crm_consultantrecord_per_changelist','title': '客户咨询列表','url': '/stark/crm/consultantrecord/per/constant/list/(?P\\d+)/'}, {'id': 92,'name': 'stark:crm_order_changelist','title': '客户订单列表','url': '/stark/crm/order/customer/order/(?P\\d+)/'}],'url': '/stark/crm/customer/per/list/'},45: {'id': 45,'name': 'stark:crm_workshop_changelist','menu_title': '生产流程管理','title': '生产车间列表','children': [{'id': 46,'name': 'stark:crm_workshop_add','title': '添加生产车间','url': '/stark/crm/workshop/add/'}, {'id': 47,'name': 'stark:crm_workshop_change','title': '修改生产车间','url': '/stark/crm/workshop/(?P\\d+)/change/'}, {'id': 48,'name': 'stark:crm_workshop_del','title': '删除生产车间','url': '/stark/crm/workshop/(?P\\d+)/del/'}],'url': '/stark/crm/workshop/list/'},79: {'id': 79,'name': 'stark:crm_paymentrecord_audit_list','menu_title': '费用管理','title': '账单审核','children': [],'url': '/stark/crm/paymentrecord/audit/'},80: {'id': 80,'name': 'logout','menu_title': '其它','title': '登出','children': [],'url': '/logout/'},17: {'id': 17,'name': 'stark:crm_product_changelist','menu_title': '产品管理','title': '产品列表','children': [{'id': 18,'name': 'stark:crm_product_add','title': '产品增加','url': '/stark/crm/product/add/'}, {'id': 19,'name': 'stark:crm_product_change','title': '产品修改','url': '/stark/crm/product/(?P\\d+)/change/'}, {'id': 20,'name': 'stark:crm_product_del','title': '产品删除','url': '/stark/crm/product/(?P\\d+)/del/'}],'url': '/stark/crm/product/list/'},82: {'id': 82,'name': 'stark:crm_order_check_order','menu_title': '订单管理','title': '订单审核','children': [],'url': '/stark/crm/order/check_list/'},53: {'id': 53,'name': 'rbac:roles_list','menu_title': '权限管理','title': '角色列表','children': [{'id': 54,'name': 'rbac:roles_add','title': '添加角色','url': '/rbac/roles/add/'}, {'id': 55,'name': 'rbac:roles_edit','title': '修改角色','url': '/rbac/roles/edit/(?P\\d+)/'}, {'id': 56,'name': 'rbac:roles_del','title': '删除角色','url': '/rbac/roles/dell/(?P\\d+)/'}, {'id': 60,'name': 'rbac:menus_del','title': '删除菜单','url': '/rbac/menus/dell/(?P\\d+)/'}],'url': '/rbac/roles/list/'},41: {'id': 41,'name': 'stark:crm_procedure_changelist','menu_title': '生产流程管理','title': '生产流程列表','children': [{'id': 42,'name': 'stark:crm_procedure_add','title': '添加生产流程','url': '/stark/crm/procedure/add/'}, {'id': 43,'name': 'stark:crm_procedure_change','title': '修改生产流程','url': '/stark/crm/procedure/(?P\\d+)/change/'}, {'id': 44,'name': 'stark:crm_procedure_del','title': '删除生产流程','url': '/stark/crm/procedure/(?P\\d+)/del/'}],'url': '/stark/crm/procedure/list/'},57: {'id': 57,'name': 'rbac:menus_list','menu_title': '权限管理','title': '菜单列表','children': [{'id': 58,'name': 'rbac:menus_add','title': '添加菜单','url': '/rbac/menus/add/'}, {'id': 59,'name': 'rbac:menus_edit','title': '修改菜单','url': '/rbac/menus/edit/(?P\\d+)/'}, {'id': 61,'name': 'rbac:permissions_add','title': '添加权限','url': '/rbac/permissions/add/'}, {'id': 62,'name': 'rbac:permissions_edit','title': '修改权限','url': '/rbac/permissions/edit/(?P\\d+)/'}, {'id': 63,'name': 'rbac:permissions_del','title': '删除权限','url': '/rbac/permissions/dell/(?P\\d+)/'}],'url': '/rbac/menus/list/'},5: {'id': 5,'name': 'stark:crm_department_changelist','menu_title': '权限管理','title': '部门列表','children': [{'id': 6,'name': 'stark:crm_department_add','title': '添加部门','url': '/stark/crm/department/add/'}, {'id': 7,'name': 'stark:crm_department_change','title': '修改部门','url': '/stark/crm/department/(?P\\d+)/change/'}, {'id': 8,'name': 'stark:crm_department_del','title': '删除部门','url': '/stark/crm/department/(?P\\d+)/del/'}],'url': '/stark/crm/department/list/'}
}

数据格式

2、处理添加菜单

添加以及修改使用的都是modelform

from django import forms
from rbac import models
from django.utils.safestring import mark_safeICON_LIST = [['fa fa-address-book', ''],['fa fa-address-book-o', ''],['fa fa-address-card', ''],['fa fa-address-card-o', ''],['fa fa-adjust', ''],['fa fa-american-sign-language-interpreting',''],['fa fa-stack-overflow', ''],['fa fa-clipboard', ''],]for item in ICON_LIST:item[1]=mark_safe(item[1])class MenuModelForm(forms.ModelForm):class Meta:model=models.Menufields=['title','icon']widgets = {'title': forms.TextInput(attrs={'placeholder': '请输入菜单名称', 'class': 'form-control'}),'icon':forms.RadioSelect(choices=ICON_LIST)}

modelform

class MenuAddView(View):def get(self,request):form = MenuModelForm()return render(request,'rbac/menu_add.html',{'form':form})def post(self,request):form=MenuModelForm(data=request.POST)if form.is_valid():form.save()return redirect(reverse('rbac:menus_list'))return render(request,'rbac/menu_add.html',{'form':form})

3、处理修改菜单

class MenuEditView(View):def get(self,request,mid):menu_obj=Menu.objects.filter(id=mid).first()if not menu_obj:return HttpResponse('该菜单不存在')form=MenuModelForm(instance=menu_obj)return render(request,'rbac/menu_edit.html',{'form':form})def post(self,request,mid):menu_obj=Menu.objects.filter(id=mid).first()form=MenuModelForm(data=request.POST,instance=menu_obj)if form.is_valid():form.save()return redirect(reverse('rbac:menus_list'))return render(request, 'rbac/menu_edit.html', {'form': form})

4、处理删除菜单

class MenuDelView(View):def get(self,request,mid):Menu.objects.filter(id=mid).first().delete()return redirect(reverse('rbac:menus_list'))

 

转:https://www.cnblogs.com/shenjianping/p/10960600.html



推荐阅读
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • 本文深入探讨了NDK与JNI技术在实际项目中的应用及其学习路径。通过分析工程目录结构和关键代码示例,详细介绍了如何在Android开发中高效利用NDK和JNI,实现高性能计算和跨平台功能。同时,文章还提供了从基础概念到高级实践的系统学习指南,帮助开发者快速掌握这些关键技术。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • Spring Batch 异常处理与任务限制优化策略 ... [详细]
  • 深入解析 UIImageView 与 UIImage 的关键细节与应用技巧
    本文深入探讨了 UIImageView 和 UIImage 的核心特性及应用技巧。首先,详细介绍了如何在 UIImageView 中实现动画效果,包括创建和配置 UIImageView 实例的具体步骤。此外,还探讨了 UIImage 的加载方式及其对性能的影响,提供了优化图像显示和内存管理的有效方法。通过实例代码和实际应用场景,帮助开发者更好地理解和掌握这两个重要类的使用技巧。 ... [详细]
  • 本文将详细介绍在Android应用中添加自定义返回按钮的方法,帮助开发者更好地理解和实现这一功能。通过具体的代码示例和步骤说明,本文旨在为初学者提供清晰的指导,确保他们在开发过程中能够顺利集成返回按钮,提升用户体验。 ... [详细]
  • 本文详细解析了 MySQL 5.7.20 版本中二进制日志(binlog)崩溃恢复机制的工作流程。假设使用 InnoDB 存储引擎,并且启用了 `sync_binlog=1` 配置,文章深入探讨了在系统崩溃后如何通过 binlog 进行数据恢复,确保数据的一致性和完整性。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 探讨 `org.openide.windows.TopComponent.componentOpened()` 方法的应用及其代码实例分析 ... [详细]
  • 探讨String参数作为锁对象时,实际锁定的是哪个具体实例? ... [详细]
  • 本文深入探讨了 HTML 中的 `margin` 属性,详细解析了其基本特性和应用场景。文章不仅介绍了 `margin` 的基本概念,还重点讨论了垂直外边距合并现象,并分析了 `margin` 在块级元素与内联元素中的不同表现。通过实例和代码示例,帮助读者全面理解 `margin` 的使用技巧和常见问题。 ... [详细]
author-avatar
手机用户40405729304
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有