本棚アプリケーションの作成②【5-4 ログイン機能の追加】

ログイン機能の実装

Djangoのauthアプリケーションの中のurls.pyファイル呼び出せるようにするためにurls.pyファイルを編集していきます。

bookproject/bookproject/urls.py

from django.contrib import admin
from django.urls import path, include    #コード追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('book.urls')),      #コード追加
]

from django.contrib import admin
from django.urls import path, include    #コード追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls')),
    path('', include('book.urls')),      #コード追加
]

に編集。

これで127.0.0.1:8000/accounts/というURLをrequestすることでauthアプリケーションのurls.pyファイルを呼び出すことができるようになりました。

サーバーを立ち上げてhttp://127.0.0.1:8000/accounts/login/にアクセスします

(venv) $ python manage.py runserver 

エラーが出ました。これはtemplateが存在しないと表示されています。このエラーを解決するためにログイン画面を表示するhtmlファイルを作成します。

以下のコマンドを実行していきます。(この時manage.pyファイルがあるディレクトリでコードを実行します)

(venv) $ mkdir templates/registration
(venv) $ touch templates/registration/login.html

そして作成したlogin.htmlファイルに以下のコードを書き込んでいきます。

bookproject/templates/registration/login.html

{% extends 'base.html' %}

{% block content %}
    <h1>ログイン</h1>
    <form method="post" class="p-4 m-4 bg-light border border-success rounded form-group">
        {% csrf_token %}
        {% for error in form.errors.values %}
            {{ error }}
        {% endfor %}
        <label>
            ユーザ ID
        </label>
        <input class="form-control" name="username">
        <label>
            パスワード
        </label>
        <input type="password" class="form-control" name="password">
        <button type="submit" class="btn btn-success mt-4">ログインする</button>
    </form>
{% endblock %}

そして再度

サーバーを立ち上げてhttp://127.0.0.1:8000/accounts/login/にアクセスします

(venv) $ python manage.py runserver 

無事にログイン画面ができました。

ここで第4章で作成したユーザーIDを入力してログインしてみましょう

そしたらエラーが出ました。これはaccpunts/profile/というURLにアクセスする設定になっているにも関わらず、そのURLを設定していないために発生したエラーです。ログイン自体はできています。このエラーを解決するためにsetting.pyファイルに以下のコードを追加します。

bookproject/bookproject/setting.py

LOGIN_REDIRECT_URL = 'list-book'

再度ログインしましょう。

無事ログインできました。