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='是否 ...
随机推荐
- 购买阿里云ECS+安装宝塔面板+Mac下怎么连接阿里云ECS服务器
1.购买阿里云ECS 2.重置实例密码 这个有点对用户不友好,实际意思就是设置服务器的root登录密码 3.配置安全组放行端口 因为服务器需要从宝塔网站download安装包,包括一些常用的服务比如S ...
- linux系统资源限制ulimit
ulimit命令用来限制系统用户对shell资源的访问.如果不懂什么意思,下面一段内容可以帮助你理解: 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下, ...
- 题解报告:hdu 2093 考试排名
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2093 Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的 ...
- 【转】【开源下载】基于TCP网络通信的即时聊天系统(IM系统)(c#源码)
原文链接 强烈关注,学习!
- [转]Walkthrough: Your First F# Program
本文转自:http://msdn.microsoft.com/en-us/library/vstudio/dd233160(v=vs.100).aspx Visual Studio 2010 in ...
- java websocket 简单使用【案例】
现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器.这种 ...
- [BZOJ1009][HNOI2008]GT考试 DP+矩阵快速幂+KMP
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1009 我们令$dp(i,j)$表示已经填了$i$位,而且后缀与不幸运数字匹配了$j$位,那 ...
- 短视频SDK用于旅游行业
超级简单易用的短视频SDK来自RDSDK.COM.锐动天地为开发者提供短视频编辑.视频直播.特效.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨 ...
- Android 计算view 的高度
上午在做一个QuickAction里嵌套一个ListView,在Demo运行没事,结果引入到我的项目里,发现我先让它在Button上面,结果是无视那个Button的高度,这很明显,就是那个Button ...
- JSP标签 <meta.....>作用总结
<metahttp-equiv="pragma" content="no-cache"> <metahttp-equiv="cach ...