效果图:

为了方便开发,先把中间件注释掉,要不还要在角色-权限表中添加对应关系。又因为二级菜单和面包屑导航需要中间件的变量,所以要在layout.html里面把这两个也注释掉。
setting.py
 # 'rbac.middlewares.rbac.RbacMiddleware'

layout.html

{#  {% multi_menu request %} #}
{#  {% breadcrumb request %} #}

一、路由分发

在主目录的urls.py下给rbac做分发

from django.urls import path, re_path, include
urlpatterns = [# rbacre_path(r'^rbac/', include(('rbac.urls', 'rbac')))
]

给rbac下的urls.py里配置路由

from django.urls import re_pathfrom rbac.views import roleurlpatterns = [re_path(r'^role/list/$', role.role_list, name='role_list'),re_path(r'^role/add/$', role.role_add, name='role_add'),re_path(r'^role/edit/(?P<pk>\d+)/$', role.role_edit, name='role_edit'),re_path(r'^role/del/(?P<pk>\d+)/$', role.role_del, name='role_del'),]

二、增加form表单验证

rbac/forms/base.py

from django import formsclass BaseBootStrapForm(forms.ModelForm):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)for name, field in self.fields.items():field.widget.attrs['class'] = 'form-control'

rbac/forms/role.py

from django import formsfrom rbac import models
from rbac.forms.base import BaseBootStrapFormclass RoleModelForm(BaseBootStrapForm):class Meta:model = models.Rolefields = ['title', ]

三、在视图函数写增删改查的功能

rbac/views/role.py

"""
角色管理
"""from django.shortcuts import HttpResponse, render, redirect, reversefrom rbac import models
from rbac.forms.roles import RoleModelFormdef role_list(request):"""角色列表:param request::return:"""role_queryset = models.Role.objects.all()return render(request, 'rbac/role_list.html', {'role_list': role_queryset})def role_add(request):"""添加角色:param request::return:"""if request.method == 'GET':forms = RoleModelForm()return render(request, 'rbac/change.html', {'forms': forms})forms = RoleModelForm(data=request.POST)if forms.is_valid():forms.save()return redirect(reverse('rbac:role_list'))return render(request, 'rbac/change.html', {'forms': forms})def role_edit(request, pk):"""编辑角色:param request::param pk: 要修改的角色id:return:"""role_obj = models.Role.objects.filter(id=pk).first()if not role_obj:return HttpResponse('角色不存在')if request.method == 'GET':forms = RoleModelForm(instance=role_obj)return render(request, 'rbac/change.html', {'forms': forms})forms = RoleModelForm(data=request.POST, instance=role_obj)if forms.is_valid():forms.save()return redirect(reverse('rbac:role_list'))return render(request, 'rbac/change.html', {'forms': forms})def role_del(request, pk):"""删除角色:param request::param pk::return:"""role_list_url = reverse('rbac:role_list')if request.method == 'GET':return render(request, 'rbac/delete.html', {'cancel': role_list_url})models.Role.objects.filter(id=pk).delete()return redirect(role_list_url)

增加和编辑可以用一个页面。删除页面给其他表做增删改查的时候也可以用,所以这里要给页面传一个固定参数cancel,以后其他表也要传这个参数。

四、渲染到模板

rbac/templates/role_list.html

{% extends 'layout.html' %}{% block content %}<h1>角色列表</h1><div class="luffy-container"><div class="btn-group" style="margin:5px 0"><a class="btn btn-default" href="{% url 'rbac:role_add' %}"><i class="fa fa-plus-square" aria-hidden="true"></i>添加角色</a></div><table class="table table-hover table-striped"><thead><tr><th>id</th><th>名称</th><th>选项</th></tr></thead><tbody>{% for role in role_list %}<tr><td>{{ role.id }}</td><td>{{ role.title }}</td><td><a style="color: #333333; font-size:18px" href="{% url 'rbac:role_edit' pk=role.id %}"><i class="fa fa-edit" aria-hidden="true"></i></a><a style="color: red; font-size:18px" href="{% url 'rbac:role_del' pk=role.id %}"><i class="fa fa-trash-o" aria-hidden="true"></i></a></td></tr>{% endfor %}</tbody></table></div>
{% endblock content %}

rbac/templates/change.html

{% extends 'layout.html' %}{% block content %}<div class="luffy-container"><form action="" method="post" novalidate>{% csrf_token %}{% for field in form %}<div class="form-group"><label for="{{ field.auto_id }}">{{ field.label }}</label>{{ field }}<span style="color:red;">{{ field.errors.0 }}</span></div>{% endfor %}<span style="color:red;">{{ errors }}</span><input type="submit" value="提交" class="btn btn-primary"></form></div>{% endblock content %}

rbac/templates/delete.html

{% extends 'layout.html' %}{% block content %}<div class="luffy-container"><div class="alert alert-danger" role="alert"><form action="" method="post" novalidate>{% csrf_token %}<p style="font-size: 13px;"><i class="fa fa-warning" aria-hidden="true"></i>删除后将不可恢复,请确认是否删除</p><div style="margin-top: 20px"><a href="{{ cancel }}" class="btn btn-default btn-sm">取消</a><input type="submit" value="确认" class="btn btn-danger btn-sm"/></div></form></div></div>
{% endblock content %}

转载于:https://www.cnblogs.com/lshedward/p/10501937.html

权限组件(6):权限分配的角色管理相关推荐

  1. CRM 开发 - 权限组件/stark组件/CRM业务

    CRM开发(系列) - 武沛齐 - 博客园CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方 ...

  2. SpringBoot整合SpringSecurity实现权限控制(五):用户管理

    系列文章目录 <SpringBoot整合SpringSecurity实现权限控制(一):实现原理> <SpringBoot整合SpringSecurity实现权限控制(二):权限数据 ...

  3. 基于SCVMM对虚拟化服务器与虚拟机管理权限分配用户角色

    基于SCVMM对虚拟化服务器与虚拟机管理权限 分配用户角色 随着云计算时代的来临,越来越多的企业已经将IT环境迁移到虚拟化环境中,那么企业如何来统一管理如此多的虚拟化主机与虚拟机,通过管理平台是否能实 ...

  4. 怎么实现角色权限的分配_Choerodon猪齿鱼实践之角色管理

    角色管理是一个平台或系统中重要的基础功能,其中角色是一组特定权限的集合,而管理员可通过给成员分配角色来赋予成员相应的权限.这是角色在各个平台中的基本用法. 考虑到平台的业务层级与结构,Choerodo ...

  5. 08-HR-权限管理模块(给员工分配角色,权限点管理页面开发,给角色分配权限,前端权限-页面访问权(路由),前端权限-按钮操作权)

    权限管理模块 RBAC的权限设计思想 采用方案: RBAC的权限模型,RBAC(Role-Based Access control) ,也就是基于角色的权限分配解决方案 权限控制目标:不同的用户登录系 ...

  6. Oracle数据库的认证方法、用户管理、权限管理和角色管理等

    1 Oracle认证方法 操作系统身份认证 网络身份认证 Oracle数据库身份认证 数据库管理员认证 操作系统认证方式 如果采用操作系统认证方式,通常需要在操作系统中创建用户组,并且授予该组DBA权 ...

  7. 权限角色管理模块_界面

    在开发很多项目的时候,都会用到用户权限管理,我也在很多项目里做过权限控制,所以,我也总结出一套条理清晰的角色权限控制体系.并且完善,减少模块的耦合度,做成一个独立的模块,用在很多项目里. 先来看看管理 ...

  8. 权限分配 html,如何为LightSwitch HTML移动客户端分配用户角色和权限

    如何为LightSwitch HTML移动客户端分配用户角色和权限 07/08/2013 6 minutes to read In this article [原文发表时间] 2013-06-25 0 ...

  9. 项目实战之旅游网(五)后台角色管理(下) 后台权限管理

    目录 一.后台角色管理(下) 1.查询角色权限 2.修改角色权限 3.优化侧边栏菜单 二.后台权限管理 1.权限列表 2.新增权限 3.修改权限 4.删除权限 一.后台角色管理(下) 1.查询角色权限 ...

最新文章

  1. 最大公约数 最小公倍数
  2. Java 消息机制之回调详解
  3. Android input keyevent
  4. 网站如何进行渠道跟踪_网站如何进行搜索引擎优化?
  5. matlab+text+extent,MATLAB字体及特殊符号标示方法
  6. python高级编程总结
  7. java dao修改语句_一个通用的DAO模型实现增删改查
  8. ES6学习之 -- Set数据结构
  9. 深度学习-Pytorch:Pytorch 创建CNN神经网络模型【ResNet模型】
  10. Sendmail和Openwebmail构建Linux下的Emai服务器
  11. 曲苑杂坛--即时文件初始化特性
  12. linux编译libmp3lame,使用libmp3lame库编码mp3
  13. Excel 各种密码的破解,大全建议收藏!
  14. 乖乖小网安-网络安全之ARP初探
  15. html5 video 不拉伸,HTML 5视频拉伸
  16. Harmonious
  17. OSChina 周日乱弹 —— 你撞鬼了吗?
  18. xmanager连接linux端口,怎么使用xmanager连接linux
  19. 用AI从零开始创建一个宫崎骏的世界
  20. Codeforces Round #777 (Div. 2)(A~C)

热门文章

  1. BugkuCTF-WEB题速度要快
  2. centos6 mysql 启动_【17-02-18】 【求助】centos6 mysql重启后无法正常启动
  3. bool类型数组转换成一个整数_Go 学习笔记 02 | 基本数据类型以及 byte 和 rune 类型...
  4. java性能优化方案_Java性能优化要点
  5. all方法 手写promise_promise.all的实现
  6. 开发缺点_开发移动端手机APP有哪些优缺点?
  7. python django restful框架_Django RESTful API 实例带你快速上手开发
  8. crtsiii型无砟轨道板_无砟轨道裂缝破损怎么修补
  9. 特殊教育学校计算机教学计划,2021年特殊教育学校教学计划
  10. android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API?