Python
Django

[Python] Django 管理サイトのパスワードリセット機能を有効化する

More than 1 year has passed since last update.


この記事について

PythonのWebアプリケーションフレームワーク Djangoの解説記事です。

Djangoの管理サイトではメール送信を使ったパスワードリセット機能が使えます。

初期状態では無効化されていますが、簡単な設定で有効になります。


設定方法

プロジェクトのurls.pyに以下の4行を追加します。

元のコードは「contrib/auth/urls.py」にサンプルとして定義されている設定です。

追加した後で、一番上の行の「password_reset」を「admin_password_reset」に変更してください。


urls.py


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'),

]


追加後に管理サイトにアクセスすると、パスワード入力欄の下にリンクが表示されます。ここクリックするとリセット処理のフローが始まります。

image.png


パスワードリセットのフロー

各画面、確認メールの本文は日本語化されています。ありがたいですね。

image.png


メール送信の設定方法

パスワードリセット時に確認メールが送信されます。

ですので実際に使うにはSettings.pyにSMTPの設定が必要となります。

以下、設定例です。


settings.py


# 本番用 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


参考:Djangoで簡単にGmailでメールを送る


仕組みについて


  • パスワードの変更用のクラスベースビューはビルトインアプリ「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

各ビューに対応するテンプレートを用意することで自作の画面を作ることができます。


参考サイト