Django 使用者認證系統:基本設定

追夢人物發表於2017-08-04

本教程為系列教程,為方便閱讀,每篇教程開頭列出全部教程的目錄索引:


網站提供登入、註冊等使用者認證功能是一個常見的需求。因此,Django 提供了一套功能完整的、靈活的、易於擴充的使用者認證系統:django.contrib.auth。在本教程中,我將向你展示 auth 模組的基本用法,例如如何提供使用者註冊、登入、修改密碼、找回密碼等功能;如何擴充 auth 內建的 User 模型;如何自定義使用者驗證後臺,以支援使用者使用諸如郵箱手機號等使用者名稱登入(預設只支援使用使用者名稱登入)等等。

開啟一個新的 Django 工程

推薦新建一個 Django 工程來作為演示或者作為練習,以免把已有的專案搞亂了。本教程的演示專案基於最新版 Django 1.11.1 和 Python 3.5,不過對於其它的 Django 和 Python 同樣適用。首先在 Python 環境下安裝 Django(推薦使用虛擬環境,如何使用虛擬環境可以參考 搭建 Django 開發環境。接下來使用 Django 提供的命令建立一個新的工程,我把它命名為 django_auth_example。

$ django-admin startproject django_auth_example複製程式碼

工程建好了,目錄結構如下:

django_auth_example/
    manage.py
    django_auth_example/
        __init__.py
        settings.py
        urls.py
        wsgi.py複製程式碼

必要的配置

Django 在新建工程時已經為使用使用者認證系統做好了全部必要的配置。不過有可能你並非使用 django-admin 命令新建的工程,或者你使用的是一個正在開發中的專案,因此最好再檢查一下 settings.py 檔案中是否已經做好了全部必要配置。

首先檢查一下必要的應用是否已經在 INSTALLED_APPS 配置裡列出:

django_auth_example/settings.py

INSTALLED_APPS = [
    # 其它應用列表...
    'django.contrib.auth',
    'django.contrib.contenttypes',
]複製程式碼

為了使用使用者認證系統,必須安裝以下兩個應用:

  • django.contrib.auth
  • django.contrib.contenttypes

django.contrib.contenttypes 是 auth 模組的使用者許可權處理部分依賴的應用。

其次需要在中介軟體 MIDDLEWARE 配置裡列出以下兩個中介軟體:

  • SessionMiddleware 使用者處理使用者會話。
  • AuthenticationMiddleware 繫結一個 User 物件到請求中(具體將在後面介紹)。

即像下面這樣的配置:

django_auth_example/settings.py

MIDDLEWARE = [
    # 其它中間列表...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
]複製程式碼

如果以上配置沒問題的話就可以正常地使用使用者認證系統了。

新建一個應用

即便是目前只使用 Django 使用者認證系統的預設特性,推薦的做法也是新建一個應用,用於存放和使用者功能相關的程式碼,為將來可能的功能擴充做準備。因此讓我們來新建一個應用,我習慣上把應用命名為 users。

$ python manage.py startapp users複製程式碼

新建的應用一定要記得在 settings.py 裡註冊,否則 Django 無法得知你新建了應用。

django_auth_example/settings.py

INSTALLED_APPS = [
    # 其它應用列表...
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'users', # 註冊新建的應用 users
]複製程式碼

OK,專案的基本準備工作到這裡就結束了,接下來讓我們開始使用 Django 使用者系統為我們提供的功能吧!

總結

本教程的示例專案程式碼位於 GitHub:Django Auth Example

如果遇到問題,請通過下面的方式尋求幫助。

更多 Django 相關教程,請訪問我的個人部落格:追夢人物的部落格

相關文章