Python Django 入門トップページ


カスタムユーザ認証

  1. プロジェクトの概要
  2. プロジェクトの作成と初期設定
  3. Users アプリケーションの作成と有効化
  4. 認証にカスタムユーザモデルを利用する
  5. モデルの作成
  6. マイグレーション
  7. ユーザの登録
  8. 管理ユーザの登録
  9. 管理サイトの作成
  10. Comments アプリケーションの作成
  11. ページ雛形の作成
  12. ログイン・ログアウトの実装
  13. Navbar の設置
  14. Comments アプリケーションのユーザ認証
  15. ユーザ一覧ページ
  16. ユーザ詳細情報の表示
  17. ユーザ情報の更新
  18. パスワードの変更
  19. Gmail 2段階認証の設定とアプリパスワードの取得
  20. メールの設定と送信
  21. パスワードのリセット
  22. ユーザ登録機能の実装
  23. ユーザ登録時に氏名も登録
  24. ユーザ登録時にメールアドレスも登録
  25. ユーザ登録してもログインできないように
  26. ユーザ登録後にメールを送信
  27. メール検証によるアカウントの有効化
  28. トークン有効期限の変更
  29. ログアウト後に top へリダイレクト
  30. 検証メールの再送信
  31. 未検証ユーザのログインエラーメッセージ
  32. メールに有効期限を表示
  33. フラッシュメッセージの変更
  34. 未検証ユーザのパスワードリセット

カスタムユーザ認証

メールの設定と送信

ここでは電子メールを送信するための設定を行い,実際に送信する実験を行います.

メールの設定

メールアカウントの情報は settings.py に記述してもよいのですが,アカウント名(メールアドレス)やアプリパスワード(Gmail 以外の場合は平文パスワード)を記述して Git で管理することは決しておすすめできません.ここでは,Git の管理下に置かない settings_secret.py に記述して,これを settings.py からインポートするようにします.

まず,.gitignore を編集して,settings_secret.py を Git 管理下に置かないようにします.

.gitignore
db.sqlite3
*/__pycache__/
*/*/__pycache__/
.coverage
htmlcov
.DS_Store
settings_secret.py

ファイルを作成して Gmail の設定情報を入力します.EMAIL_HOST_PASSWORD には前のページで取得した16文字のアプリパスワードを指定します.また,EMAIL_FROM にメールアドレスだけを指定すると,受信者には送信者のメールアドレスがそのまま表示されます.9行目のような書き方にすると受信者には送信者名が表示されるようになります.

custom_auth_project/settings_secret.py
# Gmail ---------------------------
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'xxxxxx@gmail.com'
EMAIL_HOST_PASSWORD = 'yyyyyyyyyyyyyyyy' # application password
EMAIL_PORT = 587
EMAIL_USE_TLS = True
## FROM は次のどちらかの書き方でOK
# EMAIL_FROM = 'xxxxxx@gmail.com'
EMAIL_FROM = 'UserName<xxxxxx@gmail.com>'

いま作成した settings_secret.pysettings.py でインポートします.

custom_auth_project/settings.py
from pathlib import Path
from .settings_secret import *

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent

メール送信の実験

メールの設定ができたので実際に送信するコードを入力して,簡単なメールを送信してみよう.

まず,http://127.0.0.1:8000/mail_test/ にアクセスすると決まったメールアドレスに決まった内容のメールが送信されるような機能を実装します.このために URL を定義します.

custom_auth_project/urls.py
from django.contrib import admin
from django.urls import path
from django.urls import include
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('admin/', admin.site.urls),
    path('comments/', include('comments.urls')),
    path('users/', include('users.urls')),

    path('mail_test/', views.users_mail_test, name='mail_test'),
]

次にビューを定義します.

custom_auth_project/views.py
from django.shortcuts import render


from django.conf import settings
from django.core.mail import send_mail
from django.shortcuts import redirect
from django.urls import reverse
from django.contrib import messages


# Create your views here.

def index(request):
    context = {}
    return render(request, 'index.html', context)


def users_mail_test(request):
    send_mail(
      'メールのタイトル',
      'ジャンゴからのテストメッセージの本文です.',
      settings.EMAIL_FROM, # FROM
      ['xxxxxxxxx@aa.bbbbbbbbbb.ac.jp'],   # TO
      fail_silently=False
    )
    messages.success(request, 'メールを送信しました')
    return redirect(reverse('index'))

トップページにメール送信のためのリンクを作成します.

comments/templates/index.html
{% extends "base.html" %}

{% block title %}
コメント投稿アプリケーション
{% endblock %}

{% block content %}
<h1 class="my-5">コメント投稿アプリケーション</h1>
<p>
    <a href="{% url 'comments:index' %}">
        コメント一覧ページに移動します.
    </a>
</p>
<p>
    <a href="{% url 'users:index' %}">
        ユーザ一覧ページに移動します.
    </a>
</p>

<p>
    <a href="{% url 'mail_test' %}">
        テストメールを送信します
    </a>
</p>
{% endblock content %}

トップページに接続して,「テストメールを送信します」のリンクをクリックします.

django2022-00328

メールの送信が完了すればトップページに戻ります.

django2022-00329

メールを受信すると送信されたメールの中身を確認できます.

django2022-00330

なお,メールの送信がうまくできれば,urls.py, views.py, index.html にここで追加したコードを削除するようにしてください.

目次に戻る