詳解Django之auth模組(用戶認證)
這篇文章主要介紹了詳解Django之auth模組(用戶認證),現在分享給大家,也給大家做個參考。一起過來看看吧
auth模組是登入認證方法的一種封裝,之前我們取得使用者輸入的使用者名稱及密碼後需要自己從user表裡查詢有沒有用戶名和密碼符合的對象,
而有了auth模組之後就可以很輕鬆的去驗證用戶的登入資訊是否存在於資料庫中。
除此之外,auth也對session做了一些封裝,方便我們校驗使用者是否已登入
auth裡的方法
#如果想使用auth模組的方法,必須先導入auth模組
from django.contrib import auth
django.contrib.auth中提供了許多方法,這裡主要介紹其中的四個:
1 、authenticate()
提供了使用者認證,即驗證使用者名稱以及密碼是否正確,一般需要username password兩個關鍵字參數
如果認證資訊有效,會回傳一個 User 物件。 authenticate()會在User 物件上設定一個屬性標識那種認證後端認證了該用戶,且該資訊在後面的登入過程中是需要的。當我們試著登陸一個從資料庫直接取出來不經過authenticate()的User物件會報錯的! !
user = authenticate(username='someone',password='somepassword')
2 、login(HttpRequest, user)
該函數接受一個HttpRequest對象,以及一個認證了的User物件
此函數使用django的session框架為某個已認證的使用者附加上session id等資訊。
from django.contrib.auth import authenticate, login def my_view(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) # Redirect to a success page. ... else: # Return an 'invalid login' error message. ...
3 、logout(request) 登出使用者
此函數接受一個HttpRequest對象,無回傳值。當呼叫函數時,目前請求的session資訊會全部清除。該用戶即使沒有登錄,使用函數也不會報錯。
from django.contrib.auth import logout def logout_view(request): logout(request) # Redirect to a success page.
4 、user物件的is_authenticated()
要求:
1 使用者登陸後才能存取某些頁面,
2 若使用者沒有登入就造訪該頁面的話直接跳到登入頁面
3 使用者在跳躍的登陸介面中完成登陸後,自動存取跳到之前訪問的位址
方法1:
直接用auth的is_authenticated()方法驗證
def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
2:
根據request.user.username來驗證,如果為空,則表示沒有登入
def my_view(request): if not request.user.username: return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
方法3:
django已經為我們設計好了一個用於此種情況的裝飾器:login_requierd()
#from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...
若用戶沒有登錄,則會跳到django預設的登入URL '/accounts/login/ ' (這個值可以在settings檔案中透過LOGIN_URL進行修改)。並傳遞 目前存取url的絕對路徑 ( 登陸成功後,會重定向到該路徑 )。
user物件
User 物件屬性:username,password(必填)password用雜湊演算法儲存到資料庫
is_staff : 使用者是否擁有網站的管理權限.
is_active : 是否允許使用者登入, 設定為``False``,可以不用刪除使用者來禁止使用者登入
# 2.1 、is_authenticated()
如果是真正的User 對象,則傳回值恆為True 。用於檢查使用者是否已經通過了認證。
通過認證並不意味著使用者擁有任何權限,甚至也不檢查該使用者是否處於啟動狀態,這只是表明使用者成功的通過了認證。這個方法很重要, 在後台用request.user.is_authenticated()判斷使用者是否已經登錄,如果true則可以向前台展示request.user.name
##2.2 、建立使用者
使用create_user 輔助函數建立使用者:from django.contrib.auth.models import User user = User.objects.create_user(username='',password='',email='')
2.3 、check_password(passwd)
#
user = User.objects.get(username=' ') if user.check_password(passwd): ......
user = User.objects.get(username='') user.set_password(password='') user.save
2.5 、簡單範例
註冊:##def sign_up(request): state = None if request.method == 'POST': password = request.POST.get('password', '') repeat_password = request.POST.get('repeat_password', '') email=request.POST.get('email', '') username = request.POST.get('username', '') if User.objects.filter(username=username): state = 'user_exist' else: new_user = User.objects.create_user(username=username, password=password,email=email) new_user.save() return redirect('/book/') content = { 'state': state, 'user': None, } return render(request, 'sign_up.html', content)
修改密碼:
@login_required def set_password(request): user = request.user state = None if request.method == 'POST': old_password = request.POST.get('old_password', '') new_password = request.POST.get('new_password', '') repeat_password = request.POST.get('repeat_password', '') if user.check_password(old_password): if not new_password: state = 'empty' elif new_password != repeat_password: state = 'repeat_error' else: user.set_password(new_password) user.save() return redirect("/log_in/") else: state = 'password_error' content = { 'user': user, 'state': state, } return render(request, 'set_password.html', content)
#自己建立User表 要注意的是,以上的所有操作,都是針對django自動建立的auth_user表的,我們可以看一下這張表的結構
這是django給我們自動建立的一張user表,而如果要用auth模組,就必須使用(或繼承)這張表。
继承表的好处是我们可以增加一些自己需要的字段,并且同时可以使用auth模块提供的接口、方法
下面就讲一下继承auth的方法:
1、导入AbstractUser类,并且写一个自定义的类,继承AbstractUser类,如下:
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): """ 用户信息 """ nid = models.AutoField(primary_key=True) telephone = models.CharField(max_length=11, null=True, unique=True) ......
需要注意的是,UserInfo表里就不需要有auth_user里重复的字段了,比如说username以及password等,但是还是可以直接使用这些字段的,并且django会自动将password进行加密
2、这样写完之后,还需要在setting.py文件里配置:
AUTH_USER_MODEL = 'blog.UserInfo'
这样,django就知道从blog项目下的models去查找UserInfo这张表了
相关推荐:
以上是詳解Django之auth模組(用戶認證)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

隨著社群媒體的迅速發展,小紅書已經成為了備受青睞的社群平台之一。用戶可以透過建立小紅書號來展示個人身份,並與其他用戶交流互動。如果你需要找某個用戶的小紅書號碼,可以按照以下簡單步驟來操作。一、如何用小紅書號找出用戶? 1.開啟小紅書APP,點選右下角的「發現」按鈕,然後選擇「筆記」選項。 2.在筆記清單中,找到你想找的用戶發布的筆記。點擊進入筆記詳情頁。 3.在筆記詳情頁中,點選使用者頭像下方的「追蹤」按鈕,即可進入該使用者的個人首頁。 4.在使用者個人主頁右上角,點選三個點按鈕,然後選擇「個人資訊

在Ubuntu系統中,root使用者通常是停用狀態的。要啟動root用戶,可以使用passwd指令設定密碼,然後使用su-指令以root身分登入。根用戶是具有系統管理權限且不受限制的使用者。他擁有存取和修改檔案、使用者管理、軟體安裝和刪除,以及系統配置變更等權限。根用戶與一般用戶有著明顯的區別,根用戶擁有系統中最高的權限和更廣泛的控制權。根用戶可以執行重要的系統命令和編輯系統文件,而普通用戶則無法做到這一點。在本指南中,我將探討Ubuntu根用戶,如何以根用戶身份登錄,以及它與一般用戶的不同之處。注意

Ubuntu系統增加了許多用戶,想在不用的用戶想要刪除,該怎麼刪除呢?下面我們就來看看詳細的教學。 1.開啟終端命令列,運用userdel指令刪除指定的用戶,注意要加sudo權限指令,如下圖所示2、在刪除的時候一定注意是在管理員目錄下的,普通的用戶是沒有這個權限的,如下圖所示3、刪除指令執行完了以後怎麼判斷是否真正刪除了呢?下面我們運用cat指令開啟passwd文件,如下圖所示4、我們看到passwd檔案中已經沒有了所刪除的使用者資料了,這證明使用者已經被刪除了,如下圖所示5、然後我們進入home文件

sudo(超級使用者執行)是Linux和Unix系統中的關鍵指令,允許一般使用者以root權限執行特定指令。 sudo的功能主要體現在以下幾個方面:提供權限控制:sudo透過授權使用者以臨時方式取得超級使用者權限,從而實現了對系統資源和敏感操作的嚴格控制。普通用戶只能在需要時透過sudo獲得臨時的特權,而不需要一直以超級用戶登入。提升安全性:透過使用sudo,可以避免在常規操作中使用root帳號。使用root帳戶進行所有操作可能會導致意外的系統損壞,因為任何錯誤或不小心的操作都將具有完全的權限。而

Django和Flask都是PythonWeb框架中的佼佼者,它們都有著自己的優點和適用場景。本文將對這兩個框架進行比較分析,並提供具體的程式碼範例。開發簡介Django是一個全功能的Web框架,它的主要目的是為了快速開發複雜的Web應用。 Django提供了許多內建的功能,例如ORM(物件關聯映射)、表單、認證、管理後台等。這些功能使得Django在處理大型

Django是一個完整的開發框架,該框架涵蓋了Web開發生命週期的各個方面。目前,這個框架是全球最受歡迎的Web框架之一。如果你打算使用Django來建立自己的Web應用程序,那麼你需要了解Django框架的優點和缺點。以下是您需要知道的一切,包括具體程式碼範例。 Django優點:1.快速開發-Djang可以快速開發Web應用程式。它提供了豐富的庫和內

Linux系統中的使用者密碼儲存機制解析在Linux系統中,使用者密碼的儲存是非常重要的安全機制之一。本文將解析Linux系統中使用者密碼的儲存機制,包括密碼的加密儲存、密碼的驗證過程以及如何安全地管理使用者密碼。同時,將透過具體的程式碼範例展示密碼儲存的實際操作流程。一、密碼的加密儲存在Linux系統中,使用者密碼並不是以明文的形式儲存在系統中,而是經過加密後儲存。 L

如何升級Django版本:步驟和注意事項,需要具體程式碼範例引言:Django是一個功能強大的PythonWeb框架,它持續地進行更新和升級,以提供更好的效能和更多的功能。然而,對於使用較舊版Django的開發者來說,升級Django可能會面臨一些挑戰。本文將介紹如何升級Django版本的步驟和注意事項,並提供具體的程式碼範例。一、備份項目檔案在升級Djan
