arpan mahatra
arpan mahatra

Reputation: 97

Why my User Registration Page Gives 'The view didn't return an HttpResponse object. It returned None instead.' Error?

I want to create a user registration form in django by following django tutorial part 15. However, here's an error that is on my way. My views.py is

from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render,redirect

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/polls')
        else:
            form = UserCreationForm()
            args = {'form': form}
            return render(request, 'polls/reg_form.html', args)

And, it is giving an error.

The view polls.views.register didn't return an HttpResponse object. It returned None instead.

Upvotes: 2

Views: 61

Answers (1)

Laurynas Tamulevičius
Laurynas Tamulevičius

Reputation: 1589

Because your conditional only checks for POST request, and GET request returns None by default as no return value is specified if request.method != 'POST'.

Your code indentation is wrong, I assume, it should be:

from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render,redirect

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/polls')
    else:
        form = UserCreationForm()
        args = {'form': form}
        return render(request, 'polls/reg_form.html', args)

Also, None is being returned if invalid form is POST'ed. To resolve that you could simply do this:

from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render,redirect

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/polls')
    else:
        form = UserCreationForm()

    # These lines will be executed if the request method is not POST or form is invalid
    args = {'form': form} 
    return render(request, 'polls/reg_form.html', args)

Upvotes: 2

Related Questions