权限组件(6):权限分配的角色管理

效果图:

 

为了方便开发,先把中间件注释掉,要不还要在角色-权限表中添加对应关系。又因为二级菜单和面包屑导航需要中间件的变量,所以要在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 面试700问_JAVA面试700问(一)

1、Java环境中的字节码是什么&#xff1f;由Java 编译器生成的一种代码。由JVM生成的一种代码。Java源文件(Java Source File)的别名。一种写在类的实例方法中的代码。答案&#xff1a;由Java 编译器生成的一种代码。2、什么是Java垃圾回收机制&#xff1f;操作系统周期性的删除…

02-Django基础知识

一、内容回顾 1、web应用程序 2、HTTP协议 a、http协议特性 b、http请求格式 c、http响应格式 3、wsgiref模块 4、Django下载与简单应用 a、Django简介&#xff08;MTV&#xff09; b、下载django命令 c、创建项目命令 d、创建app应用 e、启动项目   二、今日概要 1、路由层&…

java条码大小_java - ML Kit条形码扫描:无效的图像数据大小

我想在捕获的图像中检测条形码。我使用android的camera2捕获图像。此后&#xff0c;将检索图像的元数据并将图像保存到设备。元数据全部传递到下一个活动&#xff0c;该活动是应用程序尝试检测条形码的地方。下一个活动是从先前保存的文件创建一个byte []。接下来&#xff0c;使…

MongoDB数据库泄露8亿电邮地址;微软开源Windows计算器;Linux 5.0 Kernel发布丨Q新闻...

本周要闻&#xff1a;华为正式宣布起诉美国政府&#xff1b;360 首席安全官谭晓生宣布离职&#xff1b;阿里开源 Flutter 应用框架 Fish Redux&#xff1b;微软开源 Windows 计算器&#xff1b;Linux 5.0 Kernel 发布&#xff1b;电邮验证服务泄漏 8 亿电邮地址&#xff1b;Chr…

mysql 视图 分页_mysql查看所有存储过程,函数,视图,触发器,表,分页

查询数据库中的存储过程和函数方法一&#xff1a;select name from mysql.proc where db your_db_name and type PROCEDURE //存储过程select name from mysql.proc where db your_db_name and type FUNCTION //函数方法二&#xff1a;show procedure status; //存储过程sh…

postman里测试文件上传(MultipartFile)

1、后台方法&#xff1a; Override PostMapping("/importNumberSpaceData") public DataImportOutDTO importNumberSpaceData(MultipartFile file) throws Exception { return dataImportOutDTO; } 2、启用postman 1、POST方法&#xff1b; 2、Body-form-data,key为后…

java解析上的jar包里的pom_Maven引入本地Jar包并打包进War包中的方法

1.概述在平时的开发中&#xff0c;有一些Jar包因为种种原因&#xff0c;在Maven的中央仓库中没有收录&#xff0c;所以就要使用本地引入的方式加入进来。2. 拷贝至项目根目录项目根目录即pom.xml文件所在的同级目录&#xff0c;可以在项目根目录下创建文件夹lib&#xff0c;如下…

持续集成之 Spring Boot 实战篇

本文作者&#xff1a; CODING 用户 - 何健 这次实战篇&#xff0c;我们借助「CODING 持续集成」&#xff0c;实现一个简单的 Spring Boot 项目从编码到最后部署的完整过程。本教程还有 B 站视频版&#xff0c;帮助读者更好地学习理解。 思路 在线上环境构建、测试、部署 这种情…

java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)

简单工厂的构成包括三个角色&#xff1a;1)抽象产品类2)具体产品类(继承抽闲产品类)3)工厂类(生产具体产品)具体代码实现1、抽象产品类/*** 抽象类*/public abstract class Car {/*** 产品抽象方法&#xff0c;将会由具体产品类实现*/public abstract void driving();}2、具体产…

Kibana中的Coordinate Map地图报索引错误的问题

今天做地图定位展示&#xff0c;展示的是ApacheWeb服务器的访问日志文件中的来源IP。但是中间出现了报错环节&#xff0c;说是索引不能匹配到geo_point类型&#xff0c;实在是不懂这是在说什么&#xff0c;后来在网站找了方法就解决了。主要报错如下&#xff1a; 报错信息&…

mysql数据库安装在unix_Linux下的数据库二:在Linux/Unix平台安装MySQL

推荐使用RPM工具来进行Linux下的MySQL数据库安装。目前的MySQLrpm安装文件包是在SuSE Linux7.3系统平台上打造而成的&#xff0c;但是在绝大多数支持RPM和glibc的其他Linux平台中也可以进行安装。如果选择通用的RPM安装包&#xff0c;那么RPM将静态链接到Linux的线程中。下面步…

mysql时区设置gmt_将MySQL数据库时区设置为GMT

不,不可能在MySQL实例中更改单个数据库的时区.您可以检索服务器和客户端time_zone设置&#xff1a;SELECT global.time_zone, session.time_zone;您还可以更改整个MySQL实例的客户端时区或时区.但要敏锐地了解现有客户端连接的含义,以及如何解释已存储在实例中的DATETIME和TIME…

javaSE知识点汇总

javaSE知识点汇总Java基础知识精华部分写代码&#xff1a;1&#xff0c;明确需求。我要做什么&#xff1f;2&#xff0c;分析思路。我要怎么做&#xff1f;1,2,3。3&#xff0c;确定步骤。每一个思路部分用到哪些语句&#xff0c;方法&#xff0c;和对象。4&#xff0c;代码实现…

java中412是什么错_HTTP 412 错误 – 先决条件失败 (Precondition failed)

HTTP 412 错误 – 先决条件失败 (Precondition failed)介绍您的 Web 服务器认为&#xff0c;该服务器检测到客户端发送的 HTTP 数据流包括一个没有满足的‘先决条件’规范。HTTP 循环中的 412 错误任何客户端 ( 例如您的浏览器或我们的 CheckUpDown 机器人 ) &#xff0c;都需要…

细谈页面回流与重绘

你将了解到&#xff1a; 什么是回流 什么是重绘 回流何时发生 重绘何时发生 如何避免回流和重绘 复制代码带着上面的问题&#xff0c;我们一探究竟 什么是回流 回流&#xff1a;英文是reflow 当render tree中的一部分(或全部)&#xff0c;因为元素的规模尺寸、布局、隐藏等改变…

安卓 java中改布局_android-选项卡布局中的地图视图throwing,java....

我创建了一个具有选项卡布局的应用程序,单击选项卡后,我将打开一个使用Web视图的新活动.另外另一个选项卡使用地图视图,列表视图,图像视图.现在,我在Samsung Galaxy Y上安装了我的应用程序-运行正常.当我在Samsung Galaxy Tab 2上安装相同的应用程序时,当我第一次打开地图视图,…

怎么样修改PuTTY的默认字体和字符集

1.在窗口标题上点击右键&#xff0c;选择 Change Settings...2.在打开的配置窗口左边选择 Appearance&#xff0c;在右边点 Font settings 里面的 Change 按钮&#xff0c;选择好中文字体&#xff0c;比如&#xff1a;宋体、新宋体之类的3.选择配置窗口左边的 Translation&…

python 元组比较大小_为什么元组比列表更快?

所报道的“build设速度”比率只适用于常量元组(项目用文字表示)。 仔细观察(并在机器上重复 – 只需在shell /命令窗口input命令&#xff01;)…&#xff1a;$ python3.1 -mtimeit -sx,y,z1,2,3 [x,y,z] 1000000 loops, best of 3: 0.379 usec per loop $ python3.1 -mtimeit […

windows软链接的建立及删除

2019独角兽企业重金招聘Python工程师标准>>> 1.建立举例 # 建立d:develop链接目录&#xff0c;指向远程的目标服务器上的e盘的对应目录。 mklink /d d:\develop \\138.20.1.141\e$\develop# 建立d:develop链接目录&#xff0c;指向远程的目标服务器上的e盘的对应目录…

php原生类,反序列化之PHP原生类的利用

正文文章围绕着一个问题&#xff0c;如果在代码审计中有反序列化点&#xff0c;但是在原本的代码中找不到pop链该如何?N1CTF有一个无pop链的反序列化的题目&#xff0c;其中就是找到php内置类来进行反序列化。基础知识首先还是来回顾一下序列化中的魔术方法&#xff0c;下面也…