PUROGU LADESU

ポエムがメインのブログです。

【Django】標準ログイン画面を使う方法

Djangoにはログイン画面を実装する方法が提供されていますので、
それを使用します。

Djangoの認証システムを使用する | Django ドキュメント | Django

ルーティングの追加

プロジェクトルートのurls.py

urlpatterns = [
    path("accounts/", include("django.contrib.auth.urls")),
    

accounts/login でアクセスできるようになります。
この一行で他にもlogout, password_changeなどが利用可能になります。
カスタマイズする場合はaccounts/loginなどそれぞれ定義します。

htmlテンプレート

loginはテンプレートを自作する必要があります。
テンプレートはregistrationフォルダに入れる必要があります。

他の機能は下記のフォルダに入っている管理画面のテンプレートが使われるようです。
login.htmlはadminの方に入ってるので自作しないといけないです。
.venv/lib/python3.10/site-packages/django/contrib/admin/templates/registration

マニュアルにサンプルが載ってます。
コンテキストのリストにはないが画面内でuserが使える。

<h2>ログイン</h2>

{% if form.errors %}
<p>正しいユーザとパスワードを入れてください</p>
{% endif %}

{% if next %}
  {% if user.is_authenticated %}
  <p>このユーザー({{ user }})はページを見る権限がありません。別のユーザでログインしてください。</p>
  {% else %}
  <p>ページを見るにはログインしてください {{ user }}</p>
  {% endif %}
{% endif %}

<form action="{% url 'login' %}" method="post">
  {% csrf_token %}
  {{ form.as_p }}

  <input type="submit" value="login">
  <input type="hidden" name="next" value="{{ next }}">
</form>

<p><a href="{% url 'password_reset' %}">パスワード忘れた人</a></p>

ログイン画面の設定

settings.py

ログイン画面の場所、ログイン後に遷移する場所の設定。

LOGIN_URL = "login"
LOGIN_REDIRECT_URL = "/admin/"