5
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-19

##この記事について

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

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

参考サイト

5
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?