【后端】【django】Django 自帶的用戶系統與 RBAC 機制

Django 自帶的用戶系統與 RBAC 機制

Django 自帶的用戶系統(django.contrib.auth)提供了 身份驗證(Authentication)權限管理(Authorization),能夠快速實現 用戶管理、權限控制、管理員后臺 等功能,同時具備 RBAC(基于角色的訪問控制,Role-Based Access Control) 的基本實現。本文將詳細介紹 Django 用戶系統的功能、管理員賬號創建、RBAC 機制及其擴展方案。


一、Django 自帶用戶系統的作用

Django 自帶的用戶系統主要用于 用戶身份管理、身份驗證、權限與授權、用戶管理后臺 以及 擴展性,使開發者能夠快速實現用戶相關功能,而無需從零編寫。

(一)用戶身份管理

Django 提供了默認的 User 模型,其中包含:

  • 基本字段usernamepasswordemail
  • 權限字段is_active(是否激活)、is_staff(是否是后臺管理員)、is_superuser(是否是超級用戶)
  • 用戶創建
    • User.objects.create_user():創建普通用戶
    • User.objects.create_superuser():創建超級管理員

(二)身份驗證(Authentication)

  • 密碼存儲:Django 采用 PBKDF2、Argon2、BCrypt 等安全算法存儲密碼
  • 登錄與退出
    • authenticate():驗證用戶名和密碼
    • login():記錄用戶 session
    • logout():清除用戶 session,注銷登錄
  • 自動處理用戶 session:可通過 request.user 直接獲取當前登錄用戶

(三)權限與授權(Permissions & Authorization)

Django 的權限管理體系包含 用戶權限、組權限、對象權限

  • 用戶權限:通過 is_staffis_superuser 控制
  • 組權限:使用 Group 模型批量管理權限
  • 對象權限:支持模型級權限(add_xxxchange_xxxdelete_xxx
  • 權限檢查
    • @login_required 限制訪問
    • @permission_required("app_label.permission_name") 控制權限
    • request.user.has_perm("app_label.permission_name") 檢查權限

(四)用戶管理后臺

Django 自帶 admin 后臺(django.contrib.admin),可快速管理 用戶、權限、組,無需額外開發界面。

(五)擴展性

  • 自定義用戶模型:通過 AbstractUserAbstractBaseUser 進行擴展
  • 擴展用戶字段:如手機號、頭像等
  • 第三方認證:可集成 OAuth(Google、GitHub 登錄)或 JWT(DRF Simple JWT)

二、管理員賬號的創建與管理

(一)如何創建管理員賬號?

Django 不會自動創建管理員賬號,需要手動執行以下命令:

python manage.py createsuperuser

隨后輸入 用戶名、郵箱、密碼 創建管理員賬戶。

(二)如何使用管理員賬號登錄?

  1. 訪問 Django Admin 后臺
    http://127.0.0.1:8000/admin/
    
  2. 使用 createsuperuser 創建的賬號登錄。

(三)如何查看或修改管理員賬號?

  • 在數據庫中查找超級管理員
    SELECT username, email FROM auth_user WHERE is_superuser=1;
    
  • 修改管理員密碼
    python manage.py changepassword admin
    

三、Django 的 RBAC(基于角色的訪問控制)機制

Django 自帶 RBAC 的基礎實現,主要通過 用戶(User)、權限(Permission)、組(Group) 進行管理。

(一)用戶(User)

  • 每個用戶可以 獨立擁有權限歸屬于某個組(Group),繼承組權限。

(二)權限(Permission)

Django 提供了 基于模型的權限,默認包括:

  • add_modelname(添加權限)
  • change_modelname(修改權限)
  • delete_modelname(刪除權限)
  • view_modelname(查看權限)
權限檢查
  1. 代碼中檢查權限
    if request.user.has_perm('app_label.permission_name'):# 用戶有權限
    
  2. 使用裝飾器
    from django.contrib.auth.decorators import permission_required@permission_required('app_label.permission_name', raise_exception=True)
    def my_view(request):pass
    

(三)組(Group)

Group 允許批量管理權限,方便將權限分配給多個用戶。例如:

from django.contrib.auth.models import Group, Permission# 創建一個 "編輯" 組
editor_group = Group.objects.create(name='Editor')# 獲取某個權限
permission = Permission.objects.get(codename='change_article')# 給 "編輯" 組添加權限
editor_group.permissions.add(permission)# 將用戶加入 "編輯" 組
user.groups.add(editor_group)

四、Django RBAC 機制的局限性及擴展

Django 默認的 RBAC 較為基礎,存在以下局限:

  • 權限是基于模型的,無法控制對象級權限(如用戶只能編輯自己創建的文章)
  • 沒有層級角色,管理員無法管理某個組
  • 沒有前端 UI,只能通過 Django Admin 或代碼管理

(一)擴展 Django RBAC

1. 自定義權限系統
  • 繼承 AbstractUserAbstractBaseUser 自定義用戶模型
  • 設計 UserRole 表,實現 用戶 → 角色 → 權限 關系
2. 使用 django-guardian 實現對象級權限
  • django-guardian 允許用戶對特定對象(如某篇文章)賦權:
    from guardian.shortcuts import assign_permassign_perm('change_article', user, article)  # 允許 user 修改特定文章
    
3. 使用 django-rules 規則引擎
  • 通過函數定義權限規則:
    import rules@rules.predicate
    def is_author(user, article):return article.author == user
    

五、總結

功能Django 默認 RBAC擴展方案
用戶管理??
組管理??
基于模型權限??
對象級權限?django-guardian
細粒度角色管理?自定義模型
動態權限規則?django-rules

Django 自帶用戶系統 提供了 用戶管理、身份驗證、權限控制,并包含 基礎 RBAC 機制,但如果需要 更復雜的權限管理(如對象級權限、動態規則),建議使用 django-guardian、django-rules 或自定義 RBAC 方案

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72200.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72200.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72200.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

怎樣使用Modbus轉Profinet網關連接USB轉485模擬從站配置案例

怎樣使用Modbus轉Profinet網關連接USB轉485模擬從站配置案例 Modbus轉profinet網關可以將Modbus協議轉化為profinet協議,以實現設備之間的數據交互。在實際使用過程中,我們需要使用Modbus協議進行設備通訊,而profinet協議則是用于工業自動化…

5.編譯鏈接和宏**

1. 宏(考察很多)-要求輕松實現宏,很容易出錯 #define 機制包括了一個規定,允許把參數替換到文本中,這種實現通常稱為宏或定義宏。 下面是宏的聲明方式: #define name(參數列表) 內容 參數列表的左括號必…

如何搭建一個適配微信小程序,h5,app的uni-app項目

在vscode搭建 uni-app 項目(Vue 3 Vite Pinia uView Plus) 一、環境準備 1. 安裝 Node.js 確保已安裝 Node.js(需≥14版本),可通過以下命令檢查版本: node -v2. 安裝 VSCode 從 VSCode 官網 下載并…

Kotlin apply 方法的用法和使用場景

Kotlin apply 方法的用法和使用場景 1. 方法簡介 apply 是 Kotlin 標準庫中的一個擴展函數&#xff0c;用于對對象執行一系列操作&#xff0c;并返回該對象本身。它的語法如下&#xff1a; inline fun <T> T.apply(block: T.() -> Unit): T參數&#xff1a;block 是…

一文解讀python高階功能:匿名函數到魔法方法(__call__)

文章目錄 一、python中匿名方法的使用使用示例注意事項總結 二、匿名函數和魔法方法的結合示例&#xff1a;結合 lambda 和 __call__解釋更復雜的示例 總結 一、python中匿名方法的使用 在 Python 中&#xff0c;匿名方法是通過 lambda 關鍵字定義的&#xff0c;通常稱為 lamb…

云服務器新手配置內網穿透服務(frp)

首先你得有一個公網服務器&#xff0c;有了它你就可以借助它&#xff0c;將自己電腦進行配置內網穿透&#xff0c;讓自己內網電腦也可以異地輕松訪問。網上教程較多&#xff0c;特此記錄我自己的配置&#xff0c;避免迷路&#xff0c;我這里只記錄我自己云服務小白&#xff0c;…

基于STM32的火災報警設備(阿里云平臺)

目錄 前言&#xff1a; 一、項目介紹和演示視頻 二、硬件需求準備 三、硬件框圖 1. 原理圖 2. PCB 四、CubeMX配置 五、代碼框架 前言&#xff1a; 源代碼下載鏈接&#xff1a; https://download.csdn.net/download/m0_74712453/90474701 需要實物的可以私信博主或者…

學習筆記之車票搜索為什么用Redis而不是ES?

在文章正式開始前&#xff0c;大家打開 12306.cn 搜索一趟列車&#xff0c;根據搜索條件判斷&#xff0c;數據搜索技術使用 ElasticSearch 或者其它搜索技術是否合適&#xff1f; 這里我先把答案說下&#xff0c;12306 車票搜索用的是 Redis &#xff0c;而不是大家常用的 Ela…

揭秘AI:機器學習與深度學習的奧秘

文章目錄 機器學習與深度學習1. 什么是人工智能&#xff1f;2. 機器學習、深度學習和人工智能又是什么關系&#xff1f;3. 人工智能解決了什么問題&#xff1f;為什么需要人工智能&#xff1f;4. 機器學習、深度學習常用術語1&#xff09;模型2&#xff09;數據集3&#xff09;…

【具體場景實踐】使用存儲過程查數據全流程+自動調度

文章目錄 場景設計場景描述:公司員工管理系統需求1. 創建數據庫和表2. 插入測試數據3. 復雜存儲過程4. 調用存儲過程5. 結果示例6. 細節優化存儲過程總結7. 自動定期執行存儲過程7.1 啟用 MySQL 事件調度器7.2 創建定時任務(每天凌晨 2 點自動執行)7.3 查看和管理事件1?? …

【ubuntu】——wsl中使用windows中的adb

一、引言 在 Windows Subsystem for Linux&#xff08;WSL&#xff09;環境下工作時&#xff0c;有時需要使用 Android Debug Bridge&#xff08;ADB&#xff09;工具與 Android 設備進行交互。通過特定設置&#xff0c;能夠在 WSL 中便捷地調用 Windows 系統中已安裝的 ADB&a…

Centos離線安裝gcc

文章目錄 Centos離線安裝gcc1. gcc是什么&#xff1f;2. gcc下載地址3. gcc的安裝4. 安裝結果驗證 Centos離線安裝gcc 1. gcc是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是 GNU 項目下的開源編譯器套件&#xff0c;主要用于將 C、C 等編程語言的源…

JAVA中的多態性以及它在實際編程中的作用

JAVA中的多態性以及它在實際編程中的作用&#xff1f; 在Java中&#xff0c;多態性是指一個對象可以具有多種形態。它主要體現在兩個方面&#xff1a;編譯時多態和運行時多態。 1.編譯時多態 編譯時多態通過方法重載&#xff08;Overloading&#xff09;來實現。方法重載是指…

NetLink內核套接字案例分析

一、基礎知識 Netlink 是 Linux 系統中一種內核與用戶空間通信的高效機制&#xff0c;而 Netlink 消息是這種通信的核心載體。它允許用戶態程序&#xff08;如網絡配置工具、監控工具&#xff09;與內核子系統&#xff08;如網絡協議棧、設備驅動&#xff09;交換數據&#xff…

批量壓縮與優化 Excel 文檔,減少 Excel 文檔大小

當我們在 Excel 文檔中插入圖片資源的時候&#xff0c;如果我們插入的是原圖&#xff0c;可能會導致 Excel 變得非常的大。這非常不利于我們傳輸或者共享。那么當我們的 Excel 文件非常大的時候&#xff0c;我們就需要對文檔做一些壓縮或者優化的處理。那有沒有什么方法可以實現…

基于深度學習的多模態人臉情緒識別研究與實現(視頻+圖像+語音)

這是一個結合圖像和音頻的情緒識別系統&#xff0c;從架構、數據準備、模型實現、訓練等。包括數據收集、預處理、模型訓練、融合方法、部署優化等全流程。確定完整系統的組成部分&#xff1a;數據收集與處理、模型設計與訓練、多模態融合、系統集成、部署優化、用戶界面等。詳…

保姆級離線TiDB V8+解釋

以前學習的時候還是3版本&#xff0c;如今已經是8版本了 https://cn.pingcap.com/product-community/?_gl1ujh2l9_gcl_auMTI3MTI3NTM3NC4xNzM5MjU3ODE2_gaMTYwNzE2NTI4OC4xNzMzOTA1MjUz_ga_3JVXJ41175MTc0MTk1NTc1OC4xMS4xLjE3NDE5NTU3NjIuNTYuMC41NDk4MTMxNTM._ga_CPG2VW1Y4…

spark實驗2

一.實驗題目 實驗所需要求&#xff1a; centos7虛擬機 pyspark spark python3 hadoop分布式 統計歷屆春晚的節目數目 統計各個類型節目的數量&#xff0c;顯示前10名 統計相聲類節目歷年的數目。 查詢每個演員在春晚上表演節目的數量。 統計每年各類節目的數量&#xff0…

學習文章:Spring Boot 中如何使用 `@Async` 實現異步處理

文章目錄 學習文章&#xff1a;Spring Boot 中如何使用 Async 實現異步處理 一、什么是 Async&#xff1f;優點&#xff1a; 二、Spring Boot 中啟用 Async1. 啟用異步支持2. 配置線程池&#xff08;可選&#xff09;3. 使用 Async 注解4. 調用異步方法 三、Async 的進階用法1.…

Manus:成為AI Agent領域的標桿

一、引言 官網&#xff1a;Manus 隨著人工智能技術的飛速發展&#xff0c;AI Agent&#xff08;智能體&#xff09;作為人工智能領域的重要分支&#xff0c;正逐漸從概念走向現實&#xff0c;并在各行各業展現出巨大的應用潛力。在眾多AI Agent產品中&#xff0c;Manus以其獨…