LoginSignup
7
6

More than 5 years have passed since last update.

Djangoでログイン失敗時のエラーメッセージを表示する

Posted at

Django:1.10

Djangoで用意されている認証システムでログイン失敗時のエラーメッセージを表示させたい。

どうやら、Formのadd_errorを使えばよさそう。

The Forms API | Django documentation | Django
https://docs.djangoproject.com/en/1.10/ref/forms/api/#django.forms.Form.add_error

formを用意して、

forms.py
from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(label='LOGIN_ID', max_length=30)
    password = forms.CharField(
            label='PASSWORD', max_length=128, widget=forms.PasswordInput())

viewでformにadd_errorして、

views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import get_object_or_404, redirect, render

from .forms import LoginForm

def user_login(request):
    form = LoginForm()
    return render(request, 'polls/login.html', {'form': form})

def authentication(request):
    form = LoginForm(request.POST)
    if form.is_valid():
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return redirect('polls:index')
    form.add_error(None, 'LOGIN_ID、またはPASSWORDが違います。')
    return render(request, 'polls/login.html', {'form': form})

templateでエラーメッセージを表示するようにするだけ。
(add_errorの第1引数をNONEにしたので、non_field_errorsから取得する)

login.html
・・・
{% for error in form.non_field_errors %}
    <p>{{ error }}</p>
{% endfor %}
・・・

こんな感じに表示されました。

無題.png

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6