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/"