django中的auth模塊與admin後臺管理

来源:https://www.cnblogs.com/suncolor/archive/2022/09/18/16598738.html
-Advertisement-
Play Games

1. auth模塊 在創建完django項目之後,執行資料庫遷移之後,資料庫里會增加很多新表,其中有一張名為auth_user的表,當訪問django自帶的路由admin的時候,需要輸入用戶名和密碼,其參照的就是auth_user表 使用python3 manage.py crataesupperu ...


1. auth模塊

在創建完django項目之後,執行資料庫遷移之後,資料庫里會增加很多新表,其中有一張名為auth_user的表,當訪問django自帶的路由admin的時候,需要輸入用戶名和密碼,其參照的就是auth_user表

使用python3 manage.py crataesupperuser 可以創建超級管理員用戶,同時在auth_user表裡面產生一條超級用戶數據

1.1 auth模塊的常用方法

from django.contrib import auth
# 1.比對用戶名和密碼是否正確
	user_obj = auth.authenticate(request,username=username,password=password)
	# 括弧內必須同時傳入用戶名和密碼
	print(user_obj)  # 返回的是用戶對象  jason   數據不符合則返回None
	print(user_obj.username)  # jason
	print(user_obj.password)  # 結果為密文
	
# 2.保存用戶狀態
	auth.login(request,user_obj)  # 類似於request.session[key] = user_obj
	# 主要執行了該方法 你就可以在任何地方通過request.user獲取到當前登陸的用戶對象
	
# 3.判斷當前用戶是否登陸
	request.user.is_authenticated()
	登錄了返回true,否則返回false
	
# 4.獲取當前登陸用戶對象
	user_obj=request.user
	
# 5.校驗用戶是否登陸的裝飾器
	from django.contrib.auth.decorators import login_required
	# 局部配置
	@login_required(login_url='/login/')
	在需要裝飾的函數上添加上述裝飾器,括弧里表示未登錄則跳轉到指定url
	# 在setting.py里進行全局配置
	LOGIN_URL = '/login/'
		1.如果局部和全局都有 該聽誰的?
		局部 > 全局
		2.局部和全局哪個好呢?
		全局的好處在於無需重覆寫代碼 但是跳轉的頁面卻很單一
		局部的好處在於不同的視圖函數在用戶沒有登陸的情況下可以跳轉到不同的頁面
		
# 6.比對原密碼
	is_right=request.user.check_password(old_password)
	返回的是true或者false

# 7.修改密碼
	request.user.set_password(new_password)  # 僅僅是在修改對象的屬性
	request.user.save()  # 這一步才是真正的操作資料庫

# 8.註銷
	auth.logout(request)

# 9.註冊
	# 操作auth_user表寫入數據
	from django.contrib.auth.models import User #導入模塊
	User.objects.create(username=username,password=password)  # 寫入數據  不能用create 密碼沒有加密處理
	# 創建普通用戶
	User.objects.create_user(username=username,password=password)
	# 創建超級用戶(瞭解):使用代碼創建超級用戶 郵箱是必填的 而用命令創建則可以不填
	User.objects.create_superuser(username=username,email='[email protected]',password=password)

1.2 如何擴展auth_user表

from django.db import models
from django.contrib.auth.models import User,AbstractUser

# 第一種方法:一對一關係(利用外鍵)  不推薦
# class UserDetail(models.Model):
#     phone = models.BigIntegerField()
#     user = models.OneToOneField(to='User')

# 第二種:面向對象的繼承
class UserInfo(AbstractUser):
    """
    如果繼承了AbstractUser
    那麼在執行資料庫遷移命令的時候auth_user表就不會再創建出來了
    而UserInfo表中會出現auth_user所有的欄位外加自己擴展的欄位
    這麼做的好處在於你能夠直接點擊你自己的表更加快速的完成操作及擴展

    前提:
        1.在繼承之前沒有執行過資料庫遷移命令
            auth_user沒有被創建,如果當前庫已經創建了那麼你就重新換一個資料庫
        2.繼承的類裡面不要覆蓋AbstractUser裡面的欄位名
            表裡面有的欄位都不要動,只擴展額外欄位即可
        3.需要在配置文件中告訴django你要用UserInfo替代auth_user(******)
            AUTH_USER_MODEL = 'app01.UserInfo'
                                '應用名.表名'
    """
    phone = models.BigIntegerField() # 需要添加的新欄位

你如果自己寫表替代了auth_user,那麼auth模塊的功能還是照常使用,參考的表頁由原來的auth_user變成了UserInfo!

2.admin後臺管理

django的admin管理後臺提供了比較完善的管理資料庫的介面

2.1 admin後臺管理的準備工作

1.創建超級用戶:python manage.py createsuperuser
2.進入127.0.0.1/admin --使用超級用戶賬號登錄進行用戶的增加或者組的增加
3.在app中的admin.py中導入註冊自己要管理的模型類如:from . models import Book
4.admin.site.register(Book) # 註冊語法,註冊之後admin後臺就可以對該表進行管理!!

2.2 為admin後臺設置樣式和增加數據

1.修改admin後臺的表名

在該表對應的models類裡面添加一個Meta類:
    class Meta:
        verbose_name_plural = '用戶表' #指定該表在admin後臺的名字為:用戶表

image
image

2.在admin中為具體表增加數據

image

3.null=True,blank=True的區別

phone = models.BigIntegerField(verbose_name='手機號',null=True,blank=True)
    """
    null=True:是告訴資料庫該欄位可以為空,admin後臺預設還是不允許為空
    blank=True:告訴admin後臺該欄位可以為空
    """

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這個系列的目的是通過使用 JS 實現“乞丐版”的 React,讓讀者瞭解 React 的基本工作原理,體會 React 帶來的構建應用的優勢 1 HTML 構建靜態頁面 使用 HTML 和 CSS,我們很容易可以構建出上圖中的頁面 <!DOCTYPE html> <html lang="en"> < ...
  • 原型(prototype)是函數特有的屬性。只要創建了一個函數,這個函數就會自動創建一個prototype屬性(顯式原型),並指向該函數的原型對象。原型對象上都有一個constructor屬性,指向prototype屬性所在的函數(即函數本身)。而對於每一個構造函數創建出的實例對象,內部都會有一個[... ...
  • 移動端中的元素內容超出時,對容器設置overflow-x: auto就可以通過手勢水平移動。但是 PC 端只能通過滑鼠滾輪上下滑動,而不能水平移動。 只需要給元素添加一個監聽滑鼠滾輪事件,上下滑動時修改其 scrollLeft 屬性值就可以實現。直接貼上代碼: <div class="horizon ...
  • 我的設計模式之旅,本節學習原型模式。從複製原有對象出現的兩大問題思考原型模式存在的必要性。探討原型模式的實現方法。 ...
  • 在寫開源項目的時候,想到了要支持多種redis部署方式,於是對於這塊的生產環境的架構選型展開調研。 推薦使用更新的引擎版本以支持更多的特性, Redis 6.0新特性說明 模塊系統新增多個API。 支持SSL/TLS加密。 支持新的Redis協議:RESP3。 服務端支持多模式的客... ...
  • 我的設計模式之旅。本節詳細說明單例模式的實現方式、優缺點,簡要描述多線程情況下利用雙重鎖定保護單例對象和C#靜態初始化的方式。並用 Golang 實現單例模式,三個工作者需要各自找到電梯搭乘,只有一個電梯!補充C#單線程單例模式的實現。 ...
  • 目錄 一.OpenGL 圖像反色 1.原始圖片 2.效果演示 二.OpenGL 圖像反色源碼下載 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> ...
  • 我的博客 俗話說,工欲善其事必先利其器,所以在使用日期前要先對日期進行處理,所以時間戳和字元串的來回來去轉換這個事肯定是要搞的 這次的函數有一個?有兩個?有三個?有四個!上代碼! 哈哈,像不像直播帶貨 本次用到3個內置包 import reimport timeimport calendar 第一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...