rbac组件之菜单操作(三)
菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来、菜单的添加、删除、修改。
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组件之菜单操作(三)的更多相关文章
- rbac组件之角色操作(二)
为了与stark组件分离,形成独立的模块,所以rbac数据表的操作需要单独进行操作,对角色表的操作. urls.py urlpatterns = [ re_path(r'^roles/list/$', ...
- rbac组件之权限操作(四)
对于权限表的操作有两种方式,第一种是一个个的权限进行curd,另外一种是批量操作,自动发现django程序中的路由,进行批量curd,首先介绍第一种方式. 因为在列出菜单时,已经将权限列表列出来了,所 ...
- python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)
一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...
- DocX开源WORD操作组件的学习系列三
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- 应用rbac组件 动态生成一级菜单
动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...
- 扫雷游戏制作过程(C#描述):第五节、菜单操作(续)
前言 这里给出教程原文地址. 该项目已经放在github上托管. 发布版已经分享到百度网盘 菜单操作(续) 接着节前一章节的内容,我们继续完善菜单栏的功能. 我们首先,先完善Rank的选项,我们希望我 ...
- 扫雷游戏制作过程(C#描述):第四节、菜单操作
前言 这里给出教程原文地址. 该项目已经放在github上托管. 菜单操作 我们现在的程序单击菜单的时候不会有任何反应,这一节我们主要介绍菜单的相关代码,使得菜单能够正常使用. 现在我们希望在对应级别 ...
- rbac组件
创建新项目 新建一个项目untitled,注意django 版本为1.11 修改models.py,增加2个表 from django.db import models class Classes(m ...
- CRM rbac 组件的应用
1 拷贝 rbac 组件到项目中,注册这个app 2 数据库迁移 1 删除rbac下migrations里除了init外的文件 2 修改用户表 class User(models.Model): &q ...
随机推荐
- [Swift通天遁地]一、超级工具-(4)使用UIWebView(网页视图)加载HTML和Gif动画
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- A - I'm bored with life
Holidays have finished. Thanks to the help of the hacker Leha, Noora managed to enter the university ...
- Bootstrap简介及安装使用
Bootstrap 简介 什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的 ...
- C语言之图像旋转
最近用到了图像向左或者向右旋转90°的情况,纠结了好一会儿,写下来供大家参考. 1 向左旋转90° //unsigned char *pImgData: 输入图像指针 //int WidthIn, i ...
- 洛谷 P2634 [国家集训队]聪聪可可
点分板子2333 注释都是错过的地方 #include<cstdio> #include<algorithm> using namespace std; typedef lon ...
- HDFS执行getDatanodeReport输出信息
HDFS执行getDatanodeReport输出信息: Name: (192.168.101.100) Hostname: bigsrv Decommission Status : Normal C ...
- 如何移除EditText自动焦点
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_cont ...
- 窗口Dialog
Dialog是窗口的意思,它是Window的子类.与frame相比,frame是我们大的窗口,而dialog便是那种弹出来和你说话的对话框. Dialog类的默认布局是BorderLayout Dia ...
- Java数组的交集、并集
// 求两个数组的交集 public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) { // 新建一个空数组,用于存储交集,空数组长度应该为 ...
- openmv第一次调试
2018-09-19 20:14:51 import sensor, image, time import car import json import time from pyb import U ...