auth 1.我們在開發一個網站的時候,無可避免的需要設計實現網站的用戶系統。此時我們需要實現包括用戶註冊、用戶登錄、用戶認證、註銷、修改密碼等功能,這還真是個麻煩的事情呢。 2.Django作為一個完美主義者的終極框架,當然也會想到用戶的這些痛點。它內置了強大的用戶認證系統–auth,它預設使用 ...
auth
1.我們在開發一個網站的時候,無可避免的需要設計實現網站的用戶系統。此時我們需要實現包括用戶註冊、用戶登錄、用戶認證、註銷、修改密碼等功能,這還真是個麻煩的事情呢。
2.Django作為一個完美主義者的終極框架,當然也會想到用戶的這些痛點。它內置了強大的用戶認證系統–auth,它預設使用 auth_user 表來存儲用戶數據。
Django預設已經提供了認證系統Auth模塊,我們認證的時候,會使用auth模塊裡面給我們提供的表。認證系統包含:
- 用戶管理
- 許可權
- 用戶組
- 密碼哈希系統
- 用戶登錄或內容顯示的表單和視圖
- 一個可插拔的後臺系統 admin
Django用戶模型類
Django認證系統中提供了用戶模型類User保存用戶的數據,預設的User包含以下常見的基本欄位:
欄位名 | 欄位描述 |
---|---|
username |
必選。150個字元以內。 用戶名可能包含字母數字,_ ,@ ,+ . 和- 個字元。 |
first_name |
可選(blank=True )。 少於等於30個字元。 |
last_name |
可選(blank=True )。 少於等於30個字元。 |
email |
可選(blank=True )。 郵箱地址。 |
password |
必選。 密碼的哈希加密串。 (Django 不保存原始密碼)。 原始密碼可以無限長而且可以包含任意字元。 |
groups |
與Group 之間的多對多關係。 |
user_permissions |
與Permission 之間的多對多關係。 |
is_staff |
布爾值。 設置用戶是否可以訪問Admin 站點。 |
is_active |
布爾值。 指示用戶的賬號是否激活。 它不是用來控制用戶是否能夠登錄,而是描述一種帳號的使用狀態。 |
is_superuser |
是否是超級用戶。超級用戶具有所有許可權。 |
last_login |
用戶最後一次登錄的時間。 |
date_joined |
賬戶創建的時間。 當賬號創建時,預設設置為當前的date/time。 |
重要方法
Django 用戶認證(Auth)組件需要導入 auth 模塊
# 認證模塊
from django.contrib import auth
# 對應資料庫用戶表,可以繼承擴展
from django.contrib.auth.models import User
用戶對象
create() # 創建一個普通用戶,密碼是明文的。
create_user() # 創建一個普通用戶,密碼是密文的。
create_superuser() # 與create_user() 相同,但是設置is_staff 和is_superuser 為True。
set_password(*raw_password*)
# 設置用戶的密碼為給定的原始字元串,並負責密碼的。 不會保存User對象。當None為raw_password時,密碼將設置為一個不可用的密碼。
check_password(*raw_password*)
# 如果給定的raw_password是用戶的真實密碼,則返回True,可以在校驗用戶密碼時使用。
認證方法
auth.authenticate(username,password)
# 將輸入的密碼轉為密文去認證,認證成功返回用戶對象,失敗則返回None
登錄和註銷方法
from django.contrib import auth
# 該函數接受一個HttpRequest對象,以及一個認證了的User對象。此函數使用django的session框架給某個已認證的用戶附加上session id等信息。
auth.login()
# 該函數接受一個HttpRequest對象,無返回值。當調用該函數時,當前請求的session信息會全部清除。該用戶即使沒有登錄,使用該函數也不會報錯。
auth.logout()
from django.contrib.auth.models import User
User.objects.create(username="Zitty", password="127717") # 不可用 密碼不是加密的
User.objects.create_user(username="Zitty", password="127717") # 創建普通用戶 密碼自動加密
user_obj = auth.authenticate(request, username=username, password=password)
auth.login(request, user_obj)#保存用戶登錄狀態
request.user.is_authenticated()#判斷當前用戶是否登錄
request.user.check_password(old_password)#校驗原密碼是否正確
#修改密碼
request.user.set_password(new_password)
request.user.save()
#千萬不要忘了保存
request.user
Django有一個預設中間件,叫做AuthenticationMiddleware,每次請求進來都會去session中去一個userid,取不到的話,賦值request.user = AnonymousUser() , 一個匿名用戶對象。
當用戶組件auth.login一旦執行,將userid到session中後,再有請求進入Django,將註冊的userid對應的user對象賦值給request.user,即再後面的任何視圖函數中都可以從request.user中取到該客戶端的登錄對象。
自定義用戶表
from django.contrib.auth.models import AbstractUser
設置Auth認證模塊使用的用戶模型為我們自己定義的用戶模型
格式:“子應用目錄名.模型類名”
AUTH_USER_MODEL = 'users.User'
本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16867910.html