本教程為系列教程,為方便閱讀,每篇教程開頭列出全部教程的目錄索引:
- 基本設(shè)置
- 拓展 User 模型
- 注冊(cè)
- 登錄
- 注銷和頁面跳轉(zhuǎn)
- 修改密碼
- 自定義認(rèn)證后臺(tái)(撰寫中)
網(wǎng)站提供登錄、注冊(cè)等用戶認(rèn)證功能是一個(gè)常見的需求。因此,Django 提供了一套功能完整的、靈活的、易于拓展的用戶認(rèn)證系統(tǒng):django.contrib.auth。在本教程中,我將向你展示 auth 模塊的基本用法,例如如何提供用戶注冊(cè)、登錄、修改密碼、找回密碼等功能;如何拓展 auth 內(nèi)置的 User 模型;如何自定義用戶驗(yàn)證后臺(tái),以支持用戶使用諸如郵箱手機(jī)號(hào)等用戶名登錄(默認(rèn)只支持使用用戶名登錄)等等。
開啟一個(gè)新的 Django 工程
推薦新建一個(gè) Django 工程來作為演示或者作為練習(xí),以免把已有的項(xiàng)目搞亂了。本教程的演示項(xiàng)目基于最新版 Django 1.11.1 和 Python 3.5,不過對(duì)于其它的 Django 和 Python 同樣適用。首先在 Python 環(huán)境下安裝 Django(推薦使用虛擬環(huán)境,如何使用虛擬環(huán)境可以參考 搭建 Django 開發(fā)環(huán)境。接下來使用 Django 提供的命令建立一個(gè)新的工程,我把它命名為 django_auth_example。
$ django-admin startproject django_auth_example
工程建好了,目錄結(jié)構(gòu)如下:
django_auth_example/
manage.py
django_auth_example/
__init__.py
settings.py
urls.py
wsgi.py
必要的配置
Django 在新建工程時(shí)已經(jīng)為使用用戶認(rèn)證系統(tǒng)做好了全部必要的配置。不過有可能你并非使用 django-admin 命令新建的工程,或者你使用的是一個(gè)正在開發(fā)中的項(xiàng)目,因此最好再檢查一下 settings.py 文件中是否已經(jīng)做好了全部必要配置。
首先檢查一下必要的應(yīng)用是否已經(jīng)在 INSTALLED_APPS
配置里列出:
django_auth_example/settings.py
INSTALLED_APPS = [
# 其它應(yīng)用列表...
'django.contrib.auth',
'django.contrib.contenttypes',
]
為了使用用戶認(rèn)證系統(tǒng),必須安裝以下兩個(gè)應(yīng)用:
- django.contrib.auth
- django.contrib.contenttypes
django.contrib.contenttypes 是 auth 模塊的用戶權(quán)限處理部分依賴的應(yīng)用。
其次需要在中間件 MIDDLEWARE
配置里列出以下兩個(gè)中間件:
- SessionMiddleware 用戶處理用戶會(huì)話。
- AuthenticationMiddleware 綁定一個(gè) User 對(duì)象到請(qǐng)求中(具體將在后面介紹)。
即像下面這樣的配置:
django_auth_example/settings.py
MIDDLEWARE = [
# 其它中間列表...
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
]
如果以上配置沒問題的話就可以正常地使用用戶認(rèn)證系統(tǒng)了。
新建一個(gè)應(yīng)用
即便是目前只使用 Django 用戶認(rèn)證系統(tǒng)的默認(rèn)特性,推薦的做法也是新建一個(gè)應(yīng)用,用于存放和用戶功能相關(guān)的代碼,為將來可能的功能拓展做準(zhǔn)備。因此讓我們來新建一個(gè)應(yīng)用,我習(xí)慣上把應(yīng)用命名為 users。
$ python manage.py startapp users
新建的應(yīng)用一定要記得在 settings.py 里注冊(cè),否則 Django 無法得知你新建了應(yīng)用。
django_auth_example/settings.py
INSTALLED_APPS = [
# 其它應(yīng)用列表...
'django.contrib.auth',
'django.contrib.contenttypes',
'users', # 注冊(cè)新建的應(yīng)用 users
]
OK,項(xiàng)目的基本準(zhǔn)備工作到這里就結(jié)束了,接下來讓我們開始使用 Django 用戶系統(tǒng)為我們提供的功能吧!
總結(jié)
本教程的示例項(xiàng)目代碼位于 GitHub:Django Auth Example。
如果遇到問題,請(qǐng)通過下面的方式尋求幫助。
- 在 Django 用戶認(rèn)證系統(tǒng):基本設(shè)置 評(píng)論區(qū)留言。
- 在 Pythonzhcn 的 Django 版塊 發(fā)布問題詳細(xì)描述的帖子。
更多 Django 相關(guān)教程,請(qǐng)?jiān)L問我的個(gè)人博客:追夢(mèng)人物的博客。