使用者與Authentication
通過session,我們可以在多次瀏覽器請求中保持資料, 接下來的部分就是用session來處理使用者登入了。 當然,不能僅憑使用者的一面之詞,我們就相信,所以我們需要認證。
當然了,Django 也提供了工具來處理這樣的常見任務(就像其他常見任務一樣)。 Django 使用者認證系統處理使用者帳號,組,許可權以及基於cookie的使用者會話。 這個系統一般被稱為 auth/auth (認證與授權)系統。 這個系統的名稱同時也表明了使用者常見的兩步處理。 我們需要
驗證 (認證) 使用者是否是他所宣稱的使用者(一般通過查詢資料庫驗證其使用者名稱和密碼)
驗證使用者是否擁有執行某種操作的 授權 (通常會通過檢查一個許可權表來確認)
根據這些需求,Django 認證/授權 系統會包含以下的部分:
使用者 : 在網站註冊的人
許可權 : 用於標識使用者是否可以執行某種操作的二進位(yes/no)標誌
組 :一種可以將標記和許可權應用於多個使用者的常用方法
Messages : 向使用者顯示隊列式的系統訊息的常用方法
如果你已經用了admin工具(詳見第6章),就會看見這些工具的大部分。如果你在admin工具中編輯過使用者或組,那麼實際上你已經編輯過授權系統的資料庫表了。
開啟認證支援
像session工具一樣,認證支援也是一個Django應用,放在 django.contrib 中,所以也需要安裝。 與session系統相似,它也是預設安裝的,但如果它已經被刪除了,通過以下步驟也能重新安裝上:
根據本章早前的部分確認已經安裝了session 架構。 需要確認使用者使用cookie,這樣sesson 架構才能正常使用。
將 'django.contrib.auth' 放在你的 INSTALLED_APPS 設定中,然後運行 manage.py syncdb以建立對應的資料庫表。
確認 SessionMiddleware 後面的 MIDDLEWARE_CLASSES 設定中包含 'django.contrib.auth.middleware.AuthenticationMiddleware' SessionMiddleware。
這樣安裝後,我們就可以在視圖(view)的函數中處理user了。 在視圖中存取users,主要用 request.user ;這個對象表示當前已登入的使用者。 如果使用者還沒登入,這就是一個AnonymousUser對象(細節見下)。
你可以很容易地通過 is_authenticated() 方法來判斷一個使用者是否已經登入了:
if request.user.is_authenticated(): # Do something for authenticated users.else: # Do something for anonymous users.