元件功能,用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
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()來修改密碼