Django里面的User、login、logout、authenticate模塊講解
1、User模塊相關知識
user模型各個字段的說明
屬性 |
描述 |
Id |
int類型,數據表主鍵 |
Password |
varchar類型,代表用戶密碼,在默認情況下使用pbkdf2_sha256方式來存儲和管理用戶的密碼 |
username |
必填; 少於等於30字符. 只允許字符,數字,下划線 |
first_name |
可選; 少於等於30字符,代表用戶的名字 |
last_name |
可選; 少於等於30字符,代表用戶的姓氏 |
|
可選. 郵件地址. |
password |
必填. 密碼的摘要hash(Django不會存儲原始密碼),詳見密碼章節部分 |
is_staff |
布爾值. 用戶是否擁有網站的管理權限. |
is_active |
布爾值. 是否允許用戶登錄, 設置為False,可以不用刪除用戶來禁止 用戶登錄 |
is_superuser |
布爾值. 用戶是否擁有所有權限,而無需任何顯式的權限分配定義 |
last_login |
用戶最后登錄的時間,缺省會設置為當前時間 |
date_joined |
創建用戶的時間,當用戶創建時,缺省的設置為當前的時間 |
user方法
方法 |
描述 |
is_authenticated() |
如果是真正的 User 對象,返回值恆為 True 。 用於檢查用戶是否已經通過了認證。通過認證並不意味着 用戶擁有任何權限,甚至也不檢查該用戶是否處於激活狀 態,這只是表明用戶成功的通過了認證。 |
is_anonymous() |
如果是個 AnonymousUser ,返回值為 True , 如果是 User 對象,返回值為 False 。一般來 說, is_authenticated() 會比這個方法更常用些。 |
get_full_name() |
返回值為: first_name 加上 last_name ,以 空格分隔。 |
set_password(passwd) |
將用戶的密碼設置為給定的字符串,實際密碼已被哈希 處理。這時並不會真正保存 User 對象。 |
check_password(passwd) |
如果給定的字符串通過了密碼檢查,返回 True 。 密碼比較已進行了哈希處理。 |
get_group_permissions() |
返回用戶通過所屬組獲得的權限列表 |
get_all_permissions() |
返回用戶通過所屬組和用戶自身權限所獲得的所有權限 列表。 |
has_perm(perm) |
如果用戶擁有給定的權限,返回 True , perm 應形如 "package.codename" 的格式。如果用戶處於 非激活狀態,則總是返回 False 。 |
has_perms(perm_list) |
如果用戶擁有所有給定的權限,返回 True 。 如果用戶處於非激活狀態,則總是返回 False 。 |
has_module_perms(app_label) |
如果用戶擁有任何給定 app_label 的權限,返回 True 。如果用戶處於非激活狀態,則總是返回 False |
get_and_delete_messages() |
返回用戶的 Message 對象列表,並從隊列中刪除。 |
email_user(subj, msg) |
給用戶發送電子郵件,用 DEFAULT_FROM_EMAIL 的設 置作為發件人。也可以用第3個參數 from_email 來 覆蓋設置。 |
get_profile() |
返回用戶的網站自定義profile,詳見Profile章節 |
2、authenticate模塊
認證給出的用戶名和密碼,使用authenticate()函數。它接受兩個參數,用戶名username和密碼password,並在密碼對給出的用戶名合法的情況下返回一個User對象。如密碼不合法,authenticate()返回None。
>>> from django.contrib import auth >>> user = auth.authenticate(username='john', password='secret') >>> if user is not None: ... print "Correct!" ... else: ... print "Invalid password."
3、登錄和驗證
authenticate()只是驗證一個用戶的證書而已。而要登錄一個用戶,使用login()。該函數接受一個HTTPRequest對象和一個User對象作為參數並使用Django的會話(session)框架把用戶的ID保存在該會話中。
下面例子演示如何在一個視圖中同時使用authenticate()和login()函數
from django.contrib import auth def loginView(request): username = request.POST.get('username', '') password = request.POST.get('password', '') user = auth. authenticate(username=username, password=password) if user is not None and user.is_active: auth.login(request, user) return HttpResponseRedirect('/account/loggin') else: return HttpResponseRedirect('/account/invalid')
在這里,有個有意思的是:user.is_active,用來判斷用戶名密碼是否有效性
4、注銷用戶
注銷一個用戶,在你的視圖中使用logout()。它接受一個HTTPRequest對象並且沒有返回值,因為沒有返回值,徐媛媛返回一個頁面。
from django.contrib import auth def logoutView(request): auth.logout(request) return HttpResponseRedirect('/account/logou')
需要注意的是:
即使用沒有登錄,logout()也不會拋出異常