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

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<mid>\d+)/$', MenuEditView.as_view(), name='menus_edit'),
re_path(r'^menus/dell/(?P<mid>\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<pk>\\d+)/change/'
}, {
'id': 4,
'name': 'stark:crm_userinfo_del',
'title': '删除用户',
'url': '/stark/crm/userinfo/(?P<pk>\\d+)/del/'
}, {
'id': 78,
'name': 'stark:crm_userinfo_reset_pwd',
'title': '重置密码',
'url': '/stark/crm/userinfo/reset/password/(?P<pk>\\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<order_id>\\d+)/'
}, {
'id': 102,
'name': 'stark:crm_paymentrecord_change',
'title': '修改个人账单',
'url': '/stark/crm/paymentrecord/(?P<order_id>\\d+)/(?P<pk>\\d+)/change/'
}, {
'id': 103,
'name': 'stark:crm_paymentrecord_del',
'title': '删除个人账单',
'url': '/stark/crm/paymentrecord/(?P<order_id>\\d+)/(?P<pk>\\d+)/del/'
}, {
'id': 105,
'name': 'stark:crm_paymentrecord_add',
'title': '添加个人账单',
'url': '/stark/crm/paymentrecord/add/(?P<order_id>\\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<pk>\\d+)/change/'
}, {
'id': 40,
'name': 'stark:crm_productparameter_del',
'title': '删除产品参数',
'url': '/stark/crm/productparameter/(?P<pk>\\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<pk>\\d+)/change/'
}, {
'id': 12,
'name': 'stark:crm_customer_per_del',
'title': '个人客户删除',
'url': '/stark/crm/customer/per/(?P<pk>\\d+)/del/'
}, {
'id': 84,
'name': 'stark:crm_order_add',
'title': '添加客户订单',
'url': '/stark/crm/order/add/(?P<customer_id>\\d+)/'
}, {
'id': 85,
'name': 'stark:crm_order_change',
'title': '修改客户订单',
'url': '/stark/crm/order/(?P<customer_id>\\d+)/(?P<pk>\\d+)/change/'
}, {
'id': 86,
'name': 'stark:crm_order_del',
'title': '删除客户订单',
'url': '/stark/crm/order/(?P<customer_id>\\d+)/(?P<pk>\\d+)/del/'
}, {
'id': 88,
'name': 'stark:crm_consultantrecord_per_add',
'title': '添加客户咨询记录',
'url': '/stark/crm/consultantrecord/per/add/(?P<customer_id>\\d+)/'
}, {
'id': 89,
'name': 'stark:crm_consultantrecord_per_change',
'title': '修改客户咨询记录',
'url': '/stark/crm/consultantrecord/per/(?P<customer_id>\\d+)/(?P<pk>\\d+)/change/'
}, {
'id': 90,
'name': 'stark:crm_consultantrecord_per_del',
'title': '删除客户咨询记录',
'url': '/stark/crm/consultantrecord/per/(?P<customer_id>\\d+)/(?P<pk>\\d+)/del/'
}, {
'id': 91,
'name': 'stark:crm_consultantrecord_per_changelist',
'title': '客户咨询列表',
'url': '/stark/crm/consultantrecord/per/constant/list/(?P<customer_id>\\d+)/'
}, {
'id': 92,
'name': 'stark:crm_order_changelist',
'title': '客户订单列表',
'url': '/stark/crm/order/customer/order/(?P<customer_id>\\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<pk>\\d+)/change/'
}, {
'id': 48,
'name': 'stark:crm_workshop_del',
'title': '删除生产车间',
'url': '/stark/crm/workshop/(?P<pk>\\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<pk>\\d+)/change/'
}, {
'id': 20,
'name': 'stark:crm_product_del',
'title': '产品删除',
'url': '/stark/crm/product/(?P<pk>\\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<rid>\\d+)/'
}, {
'id': 56,
'name': 'rbac:roles_del',
'title': '删除角色',
'url': '/rbac/roles/dell/(?P<rid>\\d+)/'
}, {
'id': 60,
'name': 'rbac:menus_del',
'title': '删除菜单',
'url': '/rbac/menus/dell/(?P<mid>\\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<pk>\\d+)/change/'
}, {
'id': 44,
'name': 'stark:crm_procedure_del',
'title': '删除生产流程',
'url': '/stark/crm/procedure/(?P<pk>\\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<mid>\\d+)/'
}, {
'id': 61,
'name': 'rbac:permissions_add',
'title': '添加权限',
'url': '/rbac/permissions/add/'
}, {
'id': 62,
'name': 'rbac:permissions_edit',
'title': '修改权限',
'url': '/rbac/permissions/edit/(?P<pid>\\d+)/'
}, {
'id': 63,
'name': 'rbac:permissions_del',
'title': '删除权限',
'url': '/rbac/permissions/dell/(?P<pid>\\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<pk>\\d+)/change/'
}, {
'id': 8,
'name': 'stark:crm_department_del',
'title': '删除部门',
'url': '/stark/crm/department/(?P<pk>\\d+)/del/'
}],
'url': '/stark/crm/department/list/'
}
}

数据格式

2、处理添加菜单

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

from django import forms
from rbac import models
from django.utils.safestring import mark_safe ICON_LIST = [
['fa fa-address-book', '<i aria-hidden="true" class="fa fa-address-book"></i>'],
['fa fa-address-book-o', '<i aria-hidden="true" class="fa fa-address-book-o"></i>'],
['fa fa-address-card', '<i aria-hidden="true" class="fa fa-address-card"></i>'],
['fa fa-address-card-o', '<i aria-hidden="true" class="fa fa-address-card-o"></i>'],
['fa fa-adjust', '<i aria-hidden="true" class="fa fa-adjust"></i>'],
['fa fa-american-sign-language-interpreting','<i aria-hidden="true" class="fa fa-american-sign-language-interpreting"></i>'],
['fa fa-stack-overflow', '<i class="fa fa-stack-overflow" aria-hidden="true"></i>'],
['fa fa-clipboard', '<i class="fa fa-clipboard"></i>'], ] for item in ICON_LIST:
item[1]=mark_safe(item[1]) class MenuModelForm(forms.ModelForm): class Meta:
model=models.Menu fields=['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'))

rbac组件之菜单操作(三)的更多相关文章

  1. rbac组件之角色操作(二)

    为了与stark组件分离,形成独立的模块,所以rbac数据表的操作需要单独进行操作,对角色表的操作. urls.py urlpatterns = [ re_path(r'^roles/list/$', ...

  2. rbac组件之权限操作(四)

    对于权限表的操作有两种方式,第一种是一个个的权限进行curd,另外一种是批量操作,自动发现django程序中的路由,进行批量curd,首先介绍第一种方式. 因为在列出菜单时,已经将权限列表列出来了,所 ...

  3. python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)

    一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...

  4. DocX开源WORD操作组件的学习系列三

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  5. 应用rbac组件 动态生成一级菜单

    动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...

  6. 扫雷游戏制作过程(C#描述):第五节、菜单操作(续)

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 发布版已经分享到百度网盘 菜单操作(续) 接着节前一章节的内容,我们继续完善菜单栏的功能. 我们首先,先完善Rank的选项,我们希望我 ...

  7. 扫雷游戏制作过程(C#描述):第四节、菜单操作

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 菜单操作 我们现在的程序单击菜单的时候不会有任何反应,这一节我们主要介绍菜单的相关代码,使得菜单能够正常使用. 现在我们希望在对应级别 ...

  8. rbac组件

    创建新项目 新建一个项目untitled,注意django 版本为1.11 修改models.py,增加2个表 from django.db import models class Classes(m ...

  9. CRM rbac 组件的应用

    1 拷贝 rbac 组件到项目中,注册这个app 2 数据库迁移 1 删除rbac下migrations里除了init外的文件 2 修改用户表 class User(models.Model): &q ...

随机推荐

  1. bzoj 4517: [Sdoi2016]排列计数【容斥原理+组合数学】

    第一个一眼就A的容斥题! 这个显然是容斥的经典问题------错排,首先考虑没有固定的情况,设\( D_n \)为\( n \)个数字的错排方案数. \[ D_n=n!-\sum_{t=1}^{n}( ...

  2. linux下tab键在命令行情况下的强大

    tab自动补全命令,包括可以补全比较长的文件名,速度快的不是一点点

  3. JavaScript 入门案例

    四.  JavaScript 入门案例 在看本节之前,笔者建议您先看 JavaScript 基础篇  https://www.cnblogs.com/IT-LFP/p/10945884.html 1. ...

  4. python中threading中的lock类

    虽然线程可以在程序的执行过程中提高程序的运行效率,但是其带来的影响却难以忽略. Lock类是threading中用于锁定当前线程的锁定类.顾名思义,其作用是对当前运行中的线程进行锁定,只有当前线程被释 ...

  5. Python unittest 基本框架解析(2)

    下面例子,是一般测试框架的基本结构 框架知识点包括:实例化被测试模块类.装载测试用例.测试套件打包.保存测试输出结果.生成测试报告等 测试情况包括   :跳过某个case.执行成功.执行失败 #待测试 ...

  6. Python添加自己的模块路径

    进入Python编辑环境后可以,通过Python的sys.path属性获得当前搜索路径的配置,可以看到之前我们设置的路径已经在当前搜索路径中了. 然后通过sys.path.append('F:\Pyt ...

  7. D. Dasha and Very Difficult Problem 二分

    http://codeforces.com/contest/761/problem/D c[i] = b[i] - a[i],而且b[]和a[]都属于[L, R] 现在给出a[i]原数组和c[i]的相 ...

  8. JAVA300集笔记

    章节2 java入门阶段 2.1注释 单行注释 //  多行注释 /* 内容*/ 文本注释/**内容*/ 注释是为了方便阅读代码,在编译时注释会被删除. 2.2 标识符 标识符作用: 标识符用来给变量 ...

  9. R in action读书笔记(15)第十一章 中级绘图 之二 折线图 相关图 马赛克图

    第十一章 中级绘图 本节用到的函数有: plot legend corrgram mosaic 11.2折线图 如果将散点图上的点从左往右连接起来,那么就会得到一个折线图. 创建散点图和折线图: &g ...

  10. java实现的单点登录

    摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO ...