ログインの仕組みを作るのって、大変ですよね。
ただ、Djangoはデフォルトでログインの仕組みを作ってくれています。
ここでは、ログインの実装方法について学んでいきましょう。
Built-Inのログインの仕組みをまず押さえよう
まずはじめに、Built-Inでのログインがどういったことなのか?その仕組みは?という部分についてみていきましょう。
Built-Inでのログインとは、「Djangoがログインをするための色々なコードを事前に準備してくれており、それを使ってログインの実装をする」ということです。
具体的には、Djangoがすでに準備してくれているアプリのurlパターンを呼び出し、そのurlパターンに合致するurlにアクセスすると、ログインの実装が簡単にできるようになっている。というものです。
ログインするためのアプリを紹介
ここで、ログインするために使われるアプリについてお伝えしていきます。
ログインするために使われるアプリはauthです。つまり、authアプリのurls.pyファイルを呼び出すことによって、指定したurlに対するviewを呼び出すという形です。
具体的なコードをみていきましょう。
コードurlpatterns = [
path('accounts/', include('django.contrib.auth.urls'),
]
これで、authアプリの中のurls.pyファイルを呼び出すことができます。
今回はaccountというurlにしましたが、これは何でも問題ありません(任意の名前にして大丈夫です)。
authアプリの中のurls.pyファイルの中身を紹介
ここから、authアプリ内のurls.pyファイルに書かれている内容についてみていきましょう。
(一部のみ書いています。すべて確認したい方は、DjangoのオフィシャルHPを参考にしてください。)
コードlogin/ [name='login']
logout/ [name='logout']
password_change/ [name='password_change']
これは、localhost:8000/accounts/loginというurlを入力すれば、viewを書かなくても、それに対応したhtmlテンプレートを呼び出してくれることを意味して意味しています。
ただし、htmlファイルは自分で作らないといけません。
どういうことかというと、urlpatternでloginというurlが呼び出されると、djangoではデフォルトでregistration/login.htmlというファイルが呼び出されるように設定されています。
ですので、このlogin.htmlファイルを作るだけで、loginするためのウェブページを作ることができるのです。
ログインで呼ばれるhtmlファイルを作る
ログインの実装をするためには、htmlファイルを作っていきましょう。
上記の通り、ログインビューについては、Djangoはデフォルトで「registration/login.html」ファイルを呼び出すように設定されています。
ですので、registrationディレクトリを作った上で、そのディレクトリの中にlogin.htmlファイルを作っていきましょう。
コードlogin.html
<form action='' method='POST'>{% csrf_token %}
{{ form.as_p }}
<input type="submit" value='ログインする'>
</form>
フォームを作る上で最低限必要な情報を入れました。
これでサーバーを立ち上げ、実際のログイン画面を確認してみましょう。
このように、ログインの画面がちゃんと表示されていることが確認できました。
つまり、Djangoはログイン画面を作るためのViewを準備してくれているのです。
ログイン後に表示するviewを指定する
最後に、ログインが無事に完了した後に表示するviewを指定していきましょう。
この指定はsettings.pyファイルの中で行います。
このようなコードを追加してあげましょう。
コードLOGIN_REDIRECT_URL = 'home'
これで、ログイン後に、homeという名前が付けられたviewが表示されます。
htmlファイルの名前を変えたい場合
ここまでで実装は完了なのですが、デフォルトの項目を変更したいという場合もあるかと思いますので、最後にhtmlファイルの場所や名前を変えたい場合についてご紹介します。
htmlファイルの場所を変える場合、urlpatternsを以下のように変更します。
コードfrom django.contrib.auth import views as auth_views
urlpatterns = [
path('accounts/', include('django.contrib.auth.urls')),
path('login/', auth_views.LoginView.as_view(template_name='create.html')),
]
直接LoginViewを呼び出し、template_nameを変更することによって呼び出すhtmlファイルを変えているというポイントを押さえましょう。
login(Built-in)のまとめ
(1) djangoは、ログインするためのテンプレートを事前に準備してくれている
(2) ただ、htmlファイルは自分で作らなければいけない
(3) デフォルトでは、registration/login.htmlが呼び出される
(4) このlogin.htmlファイルは、urls.pyファイルで変更することができる