Django的Auth模塊

Auth模塊

我們在創建好一個Django項目后執行數據庫遷移命令會自動生成很多表????????

其中有auth_user等表

Django在啟動之后就可以直接訪問admin路由,需要輸入用戶名和密碼,數據參考的就是auth_user表,并且必須是管理員才能進入

依賴于auth_user表完成用戶相關的所有功能

創建超級用戶(管理員)

python manage.py createsuperuser
?

比對密碼和用戶名是否正確

括號內必須同時傳入用戶名和密碼

user_obj = auth.authenticate(request, username=username, password=password)

保存用戶狀態

auth.login(request, user_obj)  # 類似于request.session[key]=user_obj
# 只要執行了該方法,你就可以在任何地方通過request.user獲取到當前登錄的對象

判斷用戶當前是否登錄

request.user.is_authenticated()

獲取當前登錄用戶

request.user

校驗用戶是否登錄裝飾器

from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')  # 局部配置:用戶沒有登錄跳轉到login_url后面指定的網址
#全局配置
LOGIN_URL='/login/'

?比對密碼

request.user.check_password(old_password)  # 返回bool

修改密碼

# 設置新密碼
request.user.set_password(new_password)  # 僅僅修改對象的屬性
# 操作數據庫
request.user.save()

注銷

auth.logout(request)

注冊

User.objects.create_user(username=username,password=password
from django.contrib.auth.models import User

urls.py


from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [path('admin/', admin.site.urls),#登錄功能path('login/', views.login),#判斷用戶是否登錄path('home/', views.home),#修改密碼path('set_password/',views.set_password),#注銷功能path('logout/',views.logout),#注冊功能path('reg/',views.reg)
]

views.py

from django.shortcuts import render, redirect, HttpResponse
from django.contrib import auth# 使用auth模塊要用就用全套
def login(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')# 去用戶表中校驗數據# 1.表如何獲取# 2.密碼如何比對user_obj = auth.authenticate(request, username=username, password=password)if user_obj:# 保存用戶狀態auth.login(request, user_obj)  # 類似于request.session[key]=user_obj# 只要執行了該方法,你就可以在任何地方通過request.user獲取到當前登錄的對象return redirect('/home/')'''1.自動查找auth_user標簽2.自動給密碼加密再比對該方法注意事項括號內必須同時傳入用戶名和密碼不能只傳用戶名'''return render(request, 'login.html')from django.contrib.auth.decorators import login_required'''
1.如果全局也配置了,優先級 局部>全局
2.全局配置不需重復寫代碼,但是跳轉單一。局部配置好處在于不同的視圖函數在用戶沒有登錄的情況下可以跳到不同頁面
'''@login_required(login_url='/login/')  # 局部配置:用戶沒有登錄跳轉到login_url后面指定的網址
def home(request):print(request.user)  # 用戶對象    如果django_session表中沒有數據就拿到AnonymousUser匿名用戶# print(request.user.is_authenticated()) #匿名用戶返回False,用來判斷當前用戶是否登錄# 自動去django_session表中查看用戶對象給你封裝到request.user中return HttpResponse('ok')@login_required(login_url='/login/')
def set_password(request):if request.method == 'POST':username = request.POST.get('username')old_password = request.POST.get('old_password')new_password = request.POST.get('new_password')# 對比新舊密碼是否一致if old_password == new_password:# 校驗老密碼is_right = request.user.check_password(old_password)  # 返回boolif is_right:# 設置新密碼request.user.set_password(new_password)  # 僅僅修改對象的屬性# 操作數據庫request.user.save()return render(request, 'set_password.html', locals())
@login_required
def logout(request):auth.logout(request)return redirect('/login/')
from django.contrib.auth.models import User
def reg(request):if request.method=='POST':username = request.POST.get('username')password = request.POST.get('password')#操作auth_user表寫入數據#User.objects.create() 不能用create,密碼沒有加密處理#創建普通用戶User.objects.create_user(username=username,password=password)return render(request,'reg.html')

auth模塊表擴展???????

models.py??

from django.db import models
from django.contrib.auth.models import User,AbstractUser
# Create your models here.
class UserInfo(AbstractUser):'''如果繼承了AbstractUser那么在執行數據庫遷移命令的時候auth_user就不會被創建出來了而UserInfo表中會出現auth_user所有的字段 外加自己擴展的字段這樣你能直接點擊你自己的表更加快速的完成操作和擴展前提:1.在繼承之前沒有執行過數據庫遷移命令auth_user沒有被創建,如果當前庫已經創建了那么就重新換個庫2.繼承的類里面不要覆蓋AbstractUser里面的字段名表里面所有的字段都不要動,只要擴展字段即可3.需要在配置文件中告訴Django你要用UserInfo代替auth_userAUTH_USER_MODEL='app01.UserInfo'應用名.表名'''phone=models.BigIntegerField()
#替換了auth_user表,auth模塊還是正常使用,參考的表頁從原來的auth_user變成了UserInfo

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

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

相關文章

flink1.12.4消費kafka 報錯 The coordinator is not available

報錯 You should retry committing the latest consumed offsets. Caused by: org.apache.kafka.common.errors.CoordinatorNotAvailableException: The coordinator is not available. 但是任務還在正常跑. 開源bug [FLINK-28060] Kafka Commit on checkpointing fails rep…

12.8 作業 C++

使用手動連接,將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中,在自定義的槽函數中調用關閉函數 將登錄按鈕使用qt5版本的連接到自定義的槽函數中,在槽函數中判斷ui界面上輸入的賬號是否為"admin",密碼是否為…

一篇文章熟練掌握 Axios

Axios是什么 Axios是一個基于Promise的網絡請求庫,作用于node.js和瀏覽器中。在服務端使用原生node.js http模塊,在客戶端使用XMLHttpRequest。是基于Promise對Ajax的封裝。 Axios的特性 從瀏覽器創建XMLHttpRequests從node.js創建http請求支持Promis…

基于OpenCV的人臉識別系統案例

基于OpenCV的人臉識別系統案例 人臉識別簡介代碼實現案例應用情況 下面將介紹如何使用Python和OpenCV庫構建一個簡單但強大的人臉識別系統。人臉識別是計算機視覺領域的一個重要應用,具有廣泛的實際用途,從安全門禁到娛樂應用。 人臉識別簡介 人臉識別是…

MySQL - 表達式With as 語句的使用及練習

目錄 8.1 WITH AS 的含義 8.2 WITH AS語法的基本結構如下: 8.3 練習題1 8.4 牛客練習題 8.1 WITH AS 的含義 WITH AS 語法是MySQL中的一種臨時結果集,它可以在SELECT、INSERT、UPDATE或DELETE語句中使用。通過使用WITH AS語句,可以將一個查…

量子芯片技術:未來的計算革命

量子芯片技術:未來的計算革命 一、引言 隨著科技的不斷發展,人類正在進入一個全新的技術時代,即量子時代。量子芯片技術作為這個時代的重要代表,正逐漸改變我們對計算和信息處理的理解。本文將深入探討量子芯片技術的基本原理、…

Navicat 技術指引 | 適用于 GaussDB 分布式的服務器對象的創建/設計

Navicat Premium(16.3.3 Windows版或以上)正式支持 GaussDB 分布式數據庫。GaussDB分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能,還提供強大的高階功能(如模型、結構…

Java入門 EditPlus的安裝與配置講解

寫Java程序不建議使用EditPlus,首選idea社區版,其次是vscode, 然后是eclipse 。editplus說實話排不上號。 但既然小伙伴想了解一下怎么配置,這里就簡單說一下。 下載 首先是jdk,jdk是Java開發和運行的基礎&#xff…

EVT_WDF_DEVICE_PREPARE_HARDWARE API

NTSTATUS EVT_WDF_DEVICE_PREPARE_HARDWARE(__inWDFDEVICE Device,__inWDFCMRESLIST ResourcesRaw,__inWDFCMRESLIST ResourcesTranslated); 上面API中ResourcesRaw和ResourcesTranslated類型相同,那他們的區別是啥? 答: EVT_WDF_DEVICE_P…

【前端設計模式】之訪問者模式

引言 在前端開發中,我們經常需要處理復雜的對象結構和數據集合。這時候,訪問者模式就能派上用場了。訪問者模式允許我們將操作和數據結構分離開來,從而實現對復雜對象結構的優雅處理。 訪問者模式的特性 訪問者模式具有以下特性&#xff1…

iview Table實現跨頁勾選記憶功能以及利用ES6的Map數據結構實現根據id進行對象數組的去重

因為iview Table組件的勾選是選中當前頁的所有數據,當我們切到別的頁面時,會發送請求給后端,這個時候就會刷新我們之前頁碼已經選中的數據。現在有個需求就是,在我們選擇不同頁碼的數據勾選中之后,實現跨頁勾選記憶功能,就是說已經打鉤了的數據,不管切到哪一頁它都是打鉤…

AI聊天專題報告:ChatGPT全景圖聊聊技術產品和未來

今天分享的AI系列深度研究報告:《AI聊天專題報告:ChatGPT全景圖聊聊技術產品和未來》。 (報告出品方:LanguageX) 報告共計:22頁 爭論:ChatGPT算不算技術革命 回應吳軍老師“ChatGPT不算新技術…

Navicat 技術指引 | 適用于 GaussDB 分布式的模型功能

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能,還提供強大的高階功能(如模型、結…

Dubbo學習

一、整體架構設計分層 接口服務層(Service):該層與業務邏輯相關,根據provider和consumer的業務設計對應的接口和實現 配置層(Config):對外配置接口,以ServiceConfig和ReferenceConfig為中心 服…

cache 2.單機并發緩存

0.對原教程的一些見解 個人認為原教程中兩點知識的引入不夠友好。 首先是只讀數據結構 ByteView 的引入使用是有點迷茫的,可能不能很好理解為什么需要ByteView。 第二是主體結構 Group的引入也疑惑。其實要是熟悉groupcache,那對結構Group的使用是清晰…

線性回歸與邏輯回歸:深入解析機器學習的基石模型

目錄 一、線性回歸 二、邏輯回歸 邏輯回歸算法和 KNN 算法的區別 分類算法評價維度

QT作業2

使用手動連接,將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中,在自定義的槽函數中調用關閉函數 將登錄按鈕使用qt5版本的連接到自定義的槽函數中,在槽函數中判斷ui界面上輸入的賬號是否為"admin",密碼是否為…

Navicat 技術指引 | 適用于 GaussDB 分布式的數據查看器

Navicat Premium(16.3.3 Windows 版或以上)正式支持 GaussDB 分布式數據庫。GaussDB 分布式模式更適合對系統可用性和數據處理能力要求較高的場景。Navicat 工具不僅提供可視化數據查看和編輯功能,還提供強大的高階功能(如模型、結…

微服務學習:Nacos微服務架構中的服務注冊、服務發現和動態配置Nacos下載

Nacos的主要用途包括: 服務注冊與發現:Nacos提供了服務注冊和發現的功能,服務提供者可以將自己的服務注冊到Nacos服務器上,服務消費者則可以通過Nacos來發現可用的服務實例,從而實現服務調用。 動態配置管理&#xff…

聚觀早報 |華為暢享 70正式開售;夢餉科技雙12玩法

【聚觀365】12月8日消息 華為暢享 70正式開售 夢餉科技雙12玩法 華為Mate X5應對火海挑戰 谷歌發布AI模型Gemini 字節跳動開啟新一輪回購 華為暢享 70正式開售 精致外觀與創新科技兼具的華為暢享 70正式開售,1199元起搭載6000mAh超大電池,帶來超強…