rbac组件之角色操作(二)
为了与stark组件分离,形成独立的模块,所以rbac数据表的操作需要单独进行操作,对角色表的操作。
urls.py
urlpatterns = [
re_path(r'^roles/list/$', RoleView.as_view(),name='roles_list'),
re_path(r'^roles/add/$', RoleAddView.as_view(), name='roles_add'),
re_path(r'^roles/edit/(?P<rid>\d+)/$', RoleEditView.as_view(), name='roles_edit'),
re_path(r'^roles/dell/(?P<rid>\d+)/$', RoleDelView.as_view(), name='roles_del'),
]
views.py
from django.shortcuts import render,redirect,HttpResponse
from django.views import View
from rbac.models import *
from rbac.forms.roles import RoleModelForm
from django.urls import reverse # Create your views here. class RoleView(View):
def get(self,request):
role_queryset=Role.objects.all()
return render(request,'rbac/role_list.html',{'role_queryset':role_queryset}) class RoleAddView(View):
def get(self,request):
form = RoleModelForm()
return render(request,'rbac/role_add.html',{'form':form}) def post(self,request):
form=RoleModelForm(data=request.POST)
if form.is_valid():
form.save()
return redirect(reverse('rbac:roles_list'))
return render(request,'rbac/role_add.html',{'form':form}) class RoleEditView(View): def get(self,request,rid):
role_obj=Role.objects.filter(id=rid).first()
if not role_obj:
return HttpResponse('该角色不存在')
form=RoleModelForm(instance=role_obj)
return render(request,'rbac/role_edit.html',{'form':form}) def post(self,request,rid):
role_obj=Role.objects.filter(id=rid).first()
form=RoleModelForm(data=request.POST,instance=role_obj)
if form.is_valid():
form.save()
return redirect(reverse('rbac:roles_list'))
return render(request, 'rbac/role_edit.html', {'form': form}) class RoleDelView(View): def get(self,request,rid):
Role.objects.filter(id=rid).first().delete()
return redirect(reverse('rbac:roles_list'))
role_list.html
{% extends 'layout.html' %}
{% block css %}
{% endblock %}
{% block content %}
<div class="role_list">
<div class="container">
<a href="{% url 'rbac:roles_add' %}" class="btn btn-primary add_role">添加角色</a>
<table class="table table-hover table-bordered">
<thead>
<tr>
<td>角色ID</td>
<td>角色名称</td>
<td>权限个数</td>
<td>操作</td>
</tr>
</thead>
<tbody>
{% for row in role_queryset %}
<tr>
<td>{{ row.id }}</td>
<td>{{ row.title }}</td>
<td>{{ row.permissions.count }}</td>
<td>
<a href="{% url 'rbac:roles_edit' rid=row.id %}"><i class="fa fa-pencil" aria-hidden="true"></i></a>
<span style="padding: 2px 2px;display: inline-block">|</span>
<a href="{% url 'rbac:roles_del' rid=row.id %}"><i class="fa fa-trash" aria-hidden="true"></i></a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}
role_add.html
{% extends 'layout.html' %}
{% block content %}
<div style="margin-top: 20px">
<form method="post" class="form-horizontal" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="row">
<div class="form-group">
<label class="col-sm-2 control-label">{{ field.label }}</label>
<div class="col-sm-6">
{{ field }}<span style="color: red;display: inline-block">{{ field.errors.0 }}</span>
</div>
</div>
</div>
{% endfor %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</div>
</form>
</div>
{% endblock %}
role_edit.html
{% extends 'layout.html' %}
{% block content %}
<div style="margin-top: 20px">
<form method="post" class="form-horizontal" novalidate>
{% csrf_token %}
<div class="row">
<div class="form-group">
<label class="col-sm-2 control-label">角色名称</label>
<div class="col-sm-6">
{{ form.title }}<span style="color: red;display: inline-block">{{ form.title.errors.0 }}</span>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</div>
</form>
</div>
{% endblock %}
操作页面

rbac组件之角色操作(二)的更多相关文章
- rbac组件之权限操作(四)
对于权限表的操作有两种方式,第一种是一个个的权限进行curd,另外一种是批量操作,自动发现django程序中的路由,进行批量curd,首先介绍第一种方式. 因为在列出菜单时,已经将权限列表列出来了,所 ...
- rbac组件之菜单操作(三)
菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来.菜单的添加.删除.修改. urls.py ... re_path(r'^menus/list/$', MenuView.as ...
- DocX开源WORD操作组件的学习系列二
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- day72 关于rbac组件的小部分面试题
rbac的权限组件 基于角色的权限控制 1.什么是权限? url代表的就是一个权限 2.如何实现权限的控制? 表结构 以我们讲的课的内容为例 菜单表: - title 标题 - icon 图标 ...
- python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)
一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...
- RBAC (基于角色的访问控制)
基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而 ...
- 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 ...
- 应用rbac组件 动态生成一级菜单
动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...
随机推荐
- 【TIDB】2、TIDB进阶
0.TIDB优势 1.和MySql相比,具备OLAP能力.省去了很多数据仓库搭建成本和学习成本.这在业务层是非常受欢迎的.可以在其他分库分表业务中,通过 syncer 同步,进行合并,然后进行统计分析 ...
- 配置yum源的步骤(阿里源)
配置yum源的步骤1.可以移除默认的yum仓库,也就是删除 /etc/yum.repos.d/底下所有的.repo文件(踢出国外的yum源) 1.配置yum源,找到阿里云的官方镜像源地址 https: ...
- [Usaco2013 Jan]Island Travels
Description Farmer John has taken the cows to a vacation out on the ocean! The cows are living on N ...
- TIME-April
一转眼四月份又过了三分之一,现在才开始计划自己的四月还真是对自己太过放松了呀!不过前一段时间都在搞学生会的五四评优答辩,索然不是我喜欢的过程,但是结果还比较令人欢喜.翻掉过去的篇章,展开新的一页. 四 ...
- ACM_求N^N的最高位数
Leftmost Digit Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定一个正整数N,你应该输出N ^ N的最左边的数字 ...
- Apusic中间件结合MyEclipse进行远程调试记录
Apusic中间件结合MyEclipse进行远程调试记录. 在金蝶域中正常部署应用. 启动金蝶中间件时使用"startapusic -ds"命令. 在MyEclipse的Run-- ...
- java单元测试注释执行顺序
JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before 在测试方法运行之前运行 @Test 测试方法 @Afte ...
- ADO.net数据访问
需要引用对应命名空间:System.Data.SqlClient; SqlConnection:连接对象SqlCommand:命令对象SqlDataReader:读取器对象 //造连接字符串 stri ...
- 构建微服务开发环境2————安装IntelliJ IDEA
[内容指引] 下载IntelliJ IDEA安装包: Mac版IDEA安装: Windows版IDEA按装. 一.下载IntelliJ IDEA安装包 访问官方网址:https://www.jetbr ...
- 关于flex布局对自己的影响
对于本图来说用了一个效果就能达到这种情况,对于我来说,今天是有进步的,具体操作就是盒子模型确实,在什么地方起来的flex就运用到该地方去,刚 开始就一直有问题,思考了半天,原来是我的控制代码出现了点错 ...