天天看點

Django 使用者認證元件

元件功能,用session記錄登陸驗證狀态,子產品都封裝在auth子產品裡

導包: from django.contrib import auth

這個元件也能讓會話跟蹤更嚴謹,

a使用者登入後再用同一個用戶端登入b使用者,session在資料庫的記錄會被建立且覆寫之前的session,從始至終隻有1條資料庫記錄 而a使用者登完,再用a使用者賬号密碼登陸,原始的session在資料庫的記錄不會發生變化.

前提: 資料庫為auth-user表,建立超級使用者 python manage.py createsuperuser

1.1 authenticate(username=,password=),進行使用者名和密碼認證

​ 當我們試圖登陸一個從資料庫中直接取出來不經過authenticate()的user對象會報錯的

​ 如果驗證成功,傳回user對象,失敗傳回none

Django 使用者認證元件

1.2 login(request,user) 參數2是前一個authenticate認證成功傳回的user對象,這個對象會指派給request.user

也就是request.user =user, 這裡request.user如果認證成功則是登陸的使用者對象,如果未認證,則是一個匿名使用者對象,匿名使用者隻有username字段可以輸出調用

匿名使用者還有下面其他幾個屬性可以用

id 永遠為none

username 永遠為空字元串

get_username() 永遠傳回空字元串

is_staff和is_superuser 永遠為false

is_active 永遠為false

groups 和user_permission 永遠為空

is_annoymous() 傳回true

is_authenticated 傳回false

set_password(),check_password(),save()和delete()會引發notimplementerror

1.3 logout()

auth.logout(request)

該函數接受一個httprequest對象,無傳回值。當調用該函數時,目前請求的session資訊會全部清除。該使用者即使沒有登入,使用該函數也不會報錯。

導包 ​<code>​from django.contrib.auth.models import user​</code>​

user對應的就是資料庫的auth_user表

2.1 user對象的 is_authenticated

方法1:

方法2:

django已經為我們設計好了一個用于此種情況的裝飾器:login_requierd()

在setting.py要設定login_url,設定登陸頁面,一旦裝飾器認證失敗傳回這個登陸頁面

2.2 建立使用者

使用 create_user 輔助函數建立使用者:

自己直接調用user.objects.create,也可以隻不過這樣存儲的賬号密碼是明文,而django自帶的建立的是密文

2.3 check_password(passwd)

使用者修改密碼的時候,讓他先輸入原來的密碼,如果輸入正确傳回true

2.4修改密碼

使用set_password()來修改密碼