0

I have a simple login form and signup form which upon wrong validation it doesn't throw any error, these are respective codes:

def signup_view(request):
    if request.method == 'POST':
        signup_form = UserRegistrationForm(request.POST)
        if signup_form.is_valid():
            signup_form.save()
            username = signup_form.cleaned_data.get('username')
            messages.success(request, f'Thank you for using our website.')
            return redirect('user:login')

    signup_form = UserRegistrationForm()
    context = {
        'form':signup_form
    }
    return render(request, 'users/signup.html', context)


def login_view(request):
    if request.method == 'POST':
        login_form = AuthenticationForm(request, request.POST)
        if login_form.is_valid():
            username = login_form.cleaned_data.get('username')
            user = authenticate(username=username, password=login_form.cleaned_data.get('password'))
            if user is not None:
                login(request, user)
                messages.success(request, f'Successfully logged in as <strong> {username} </strong> ')
                return redirect('blog:blogs')

    login_form = AuthenticationForm()
    context = {
        'form': login_form
    }
    return render(request, 'users/login.html', context)

this is login form and it looks same as signup form:

    <form action="." method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form|crispy }}
        <input type="submit" value="Login" class="btn btn-warning btn-block">
        <hr>
        <small class='text-secondary'>Don't have an account? <a href="{% url 'user:signup' %}">Sign up</a> </small> <br>
        <small class='text-secondary'>Forgot password? <a href="{% url 'password_reset' %}">Reset</a></small>
    </form>   

These two forms work properly, it can create a new user and it log in that user, but if I make any error it doesn't throw or show that error, why?

Thank you in advance

Mir Stephen
  • 1,758
  • 4
  • 23
  • 54
  • 1
    In template you do'nt handle exception error. Please read this: https://stackoverflow.com/questions/51146120/django-form-errors-not-showing-up-in-template – Milad Hatami Jun 15 '19 at 10:22
  • Thank you brother, PROBLEM SOLVED, the problem is I just needed to add an `else` in my if condition at views.py – Mir Stephen Jun 15 '19 at 10:29

1 Answers1

0

Because your have return blank form in error condition

try this

def login_view(request):
    login_form = AuthenticationForm()
    if request.method == 'POST':
        login_form = AuthenticationForm(request, request.POST)
        if login_form.is_valid():
            username = login_form.cleaned_data.get('username')
            user = authenticate(username=username, password=login_form.cleaned_data.get('password'))
            if user is not None:
                login(request, user)
                messages.success(request, f'Successfully logged in as <strong> {username} </strong> ')
                return redirect('blog:blogs')
        else:

            login_form = AuthenticationForm(request.POST)
    context = {
        'form': login_form
    }
    return render(request, 'users/login.html', context)

hope it helps

rahul.m
  • 5,572
  • 3
  • 23
  • 50