diadia

興味があることをやってみる。自分のメモを残しておきます。

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を定義してあげればエラーが解消される。