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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528735.html
標籤:Python
