權限組件(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.pswp.cn/news/536842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536842.shtml
英文地址,請注明出處:http://en.pswp.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;下面也…