为了与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组件之角色操作(二)的更多相关文章

  1. rbac组件之权限操作(四)

    对于权限表的操作有两种方式,第一种是一个个的权限进行curd,另外一种是批量操作,自动发现django程序中的路由,进行批量curd,首先介绍第一种方式. 因为在列出菜单时,已经将权限列表列出来了,所 ...

  2. rbac组件之菜单操作(三)

    菜单包括菜单列表,菜单列表不仅将菜单列出来,而且将每个菜单下的权限也列出来.菜单的添加.删除.修改. urls.py ... re_path(r'^menus/list/$', MenuView.as ...

  3. DocX开源WORD操作组件的学习系列二

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

  4. day72 关于rbac组件的小部分面试题

    rbac的权限组件   基于角色的权限控制 1.什么是权限? url代表的就是一个权限 2.如何实现权限的控制? 表结构  以我们讲的课的内容为例 菜单表: - title 标题 - icon 图标 ...

  5. python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)

    一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...

  6. RBAC (基于角色的访问控制)

    基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而 ...

  7. rbac组件

    创建新项目 新建一个项目untitled,注意django 版本为1.11 修改models.py,增加2个表 from django.db import models class Classes(m ...

  8. CRM rbac 组件的应用

    1 拷贝 rbac 组件到项目中,注册这个app 2 数据库迁移 1 删除rbac下migrations里除了init外的文件 2 修改用户表 class User(models.Model): &q ...

  9. 应用rbac组件 动态生成一级菜单

    动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...

随机推荐

  1. 洛谷P2787 语文1(chin1)- 理理思维(珂朵莉树)

    传送门 一看到区间推倒……推平操作就想到珂朵莉树 区间推平直接assign,查询暴力,排序的话开一个桶统计,然后一个字母一个字母加就好了 开桶统计的时候忘了保存原来的左指针然后挂了233 //mina ...

  2. Luogu P1330 封锁阳光大学【Dfs】 By cellur925

    题目传送门 这道题我们很容易去想到二分图染色,但是这个题好像又不是一个严格的二分图. 开始的思路:dfs每个点,扫与他相邻的每个点,如果没访问,染相反颜色:如果访问过,进行检查,如果不可行,直接结束程 ...

  3. 安装privoxy后curl 操作

    如果讲privoxy服务关掉 sudo /etc/init.d/privoxy restart 这时候发现 curl www.baidu.com 也没法正常工作,直接显示的是无法连接到相应端口还是 主 ...

  4. JS 数据类型入门与typeof操作符

    标准的数据类型划分: 基本类型: number(数字).string(字符串).undefined.boolean(布尔值).null(空对象) //空对象与非空对象,最大的区别就是不能进行属性操作 ...

  5. shiro 登录

    @Controllerpublic class LoginController { @RequestMapping(value="/login") public @Response ...

  6. SQL 初级教程学习(五)

    1.DEFAULT 约束用于向列中插入默认值. CREATE TABLE Orders(Id_O int NOT NULL,OrderNo int NOT NULL,Id_P int,OrderDat ...

  7. Android偏好设置(3)启动偏好设置后显示的界面PreferenceActivity和PreferenceFragment

    Creating a Preference Activity To display your settings in an activity, extend the PreferenceActivit ...

  8. string.Format 中不能包含{}字符串

    string scss = @"<style type=""text/css""> body{ margin-left: {0}px; m ...

  9. C# 判断文件和文件夹是否存在并创建

    C# 判断文件和文件夹是否存在并创建 using System; using System.Data; using System.Configuration; using System.Collect ...

  10. 【JavaScript】随机生成10个0~100的数字

    随机生成10个0~100不重复的数字(包含0和100): 需要用到的知识点:随机数 去重 下面放代码 <!DOCTYPE html> <html> <head> & ...