LoginViewを使ったログイン実装
以前までのログイン実装方法
以前までviews.pyにはlogin用の関数を定義してログインする方法をとっていた。
ユーザーログイン機能をdjangoプロジェクトに実装する
LoginViewによるログイン機能の実装
LoginViewを使うことでurls.py,settings.pyとテンプレート(html)を作成するだけで完成する。慣れていれば2分もかからずとも実装できるのが魅力。
実装例
accounts/urls.pyにて #accountsはアプリ名 from django.urls import path from django.contrib.auth.views import LoginView app_name = "accounts" urlpatterns = [ path('login/', LoginView.as_view(), name="login"), ]
project名/settings.pyにて LOGIN_REDIRECT_URL = 'products:product_list' # LOGIN_REDIRECT_URL ='アプリ名':'urls.pyのname' を挿入
templates/registration/login.htmlにて <form method="POST"> {% csrf_token %} {{ form }} <button type="submit">ログイン</button>
参考情報
LoginViewのアトリビュート情報:class LoginView
LoginViewのアトリビュートのひとつにform_classがある。それはデフォルトで以下のように定められている。
form_class = <class 'django.contrib.auth.forms.AuthenticationForm'>
通常Updateviewのようなフォームを伴うViewにはfieldsやform_classを定める必要があるが、LoginViewの場合にはすでに定められている。
LOGIN_REDIRECT_URLについて
https://docs.djangoproject.com/ja/2.1/topics/auth/default/#django.contrib.auth.views.LoginView
https://docs.djangoproject.com/ja/2.1/ref/settings/#std:setting-LOGIN_REDIRECT_URL
Loginフォームに正しく入力してログインすると、デフォルトで'/accounts/profile/'のurlにリダイレクトする仕様にLoginViewはできている。これをurls.pyで定めるか、settings.pyにてリダイレクトurlを定義してあげればエラーが解消される。