Python/Django: How to display error messages on invalid login? Python/Django: How to display error messages on invalid login? django django

Python/Django: How to display error messages on invalid login?


You should just add inside your template:

{% block title %}Login{% endblock %}{% block content %}<h2>Login</h2>{% if form.errors %}    <p>username or password not correct</p>{% endif %}<form method="post">    {% csrf_token %}    {{ form.as_p }}    <button type="submit">Login</button></form>{% endblock %}


in your template

{% for message in messages %}        <div class="alert alert-success">        <a class="close" href="#" data-dismiss="alert">×</a>           {{ message }}    </div>{% endfor %}

in view

from django.contrib import messagesdef login(request):    if request.method == 'POST':        form = AuthenticationForm(request.POST)        username = request.POST['username']        password = request.POST['password']        user = authenticate(username=username, password=password)            if user is not None:            if user.is_active:                auth_login(request, user)                return redirect('index')        else:            messages.error(request,'username or password not correct')            return redirect('login')        else:        form = AuthenticationForm()    return render(request, 'todo/login.html', {'form': form})


Updating for Django 2.0:

For individual field errors (e.g) :

    <input type="text" class="form-control my-4" id="id_username" placeholder="Username" name="username">    {% for error in form.username.errors %}         <p class="text-danger">{{ error }}</p>    {% endfor %}

For non field errors (e.g if password is incorrect):

     {% if form.non_field_errors %}            {% for error in form.non_field_errors %}                <p class="text-danger">{{ error }}</p>            {% endfor %}      {% endif %}

You should place the above at the end of all fields.