Django內置登錄模塊介紹


Django里面的User、login、logout、authenticate模塊講解

 

1、User模塊相關知識

user模型各個字段的說明

屬性

描述

Id

int類型,數據表主鍵

Password

varchar類型,代表用戶密碼,在默認情況下使用pbkdf2_sha256方式來存儲和管理用戶的密碼

username

必填; 少於等於30字符. 只允許字符,數字,下划線

first_name

可選; 少於等於30字符,代表用戶的名字

last_name

可選; 少於等於30字符,代表用戶的姓氏

email

可選. 郵件地址.

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()也不會拋出異常

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM