##この記事について
PythonのWebアプリケーションフレームワーク Djangoの解説記事です。
Djangoの管理サイトではメール送信を使ったパスワードリセット機能が使えます。
初期状態では無効化されていますが、簡単な設定で有効になります。
設定方法
プロジェクトのurls.pyに以下の4行を追加します。
元のコードは「contrib/auth/urls.py」にサンプルとして定義されている設定です。
追加した後で、一番上の行の「password_reset」を「admin_password_reset」に変更してください。
from django.contrib import admin
from django.contrib.auth import views
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
path('password_reset/', views.PasswordResetView.as_view(), name='admin_password_reset'),
path('password_reset/done/', views.PasswordResetDoneView.as_view(), name='password_reset_done'),
path('reset/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('reset/done/', views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
追加後に管理サイトにアクセスすると、パスワード入力欄の下にリンクが表示されます。ここクリックするとリセット処理のフローが始まります。
パスワードリセットのフロー
各画面、確認メールの本文は日本語化されています。ありがたいですね。
##メール送信の設定方法
パスワードリセット時に確認メールが送信されます。
ですので実際に使うにはSettings.pyにSMTPの設定が必要となります。
以下、設定例です。
# 本番用 django/conf/global_setting.py を見て差分を修正する
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'your.address@gmail.com'
EMAIL_HOST_PASSWORD = 'passowrd'
EMAIL_PORT = 587
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 開発用 コンソールに出力する
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# 開発用 ファイルに出力する
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = '/tmp/app-messages' # change this to a proper location
##仕組みについて
-
パスワードの変更用のクラスベースビューはビルトインアプリ「auth」より提供されている。
django/contrib/auth.views.py
参照 -
各ビューに対応するテンプレートはビルトインアプリ「admin」で提供されている。ディレクトリ
contrib/admin/templates/registration
参照
・ビュー名:admin_password_resetが存在する時、管理サイトのログイン画面にリンクが表示されるようになっている。contrib/admin/templates/registration/login.html
参照
クラスベースビューのクラス名とデフォルトテンプレート名の関係をまとめたものが以下の表です。
機能 | CBV名 | テンプレート名 |
---|---|---|
ログイン | LoginView | login.html |
ログアウト | LogoutView | logged_out.html |
パスワード変更 | PasswordChangeView | password_change_form.html |
パスワード変更(完了) | PasswordChangeDoneView | password_change_done.html |
パスワード再設定 申請 | PasswordResetView | password_reset_form.html |
パスワード再設定 申請完了 | PasswordResetDoneView | password_reset_done.html |
パスワード再設定メール本文 | password_reset_email.html | |
パスワード再設定 再設定 | PasswordResetConfirmView | password_reset_confirm.html |
パスワード再設定 完了 | PasswordResetCompleteView | password_reset_complete.html |
各ビューに対応するテンプレートを用意することで自作の画面を作ることができます。