How do I make Django show the "user already exists" message when someone tries to register with an existing username?

1,234 views
Skip to first unread message

Tom Tanner

unread,
Nov 23, 2017, 7:13:16 PM11/23/17
to Django users
My `urls.py` has this:
url("^login_register/$", views.login_register, name="login_register"),
url("^register/$", views.register, name="register"),

`views.py` has this:
def login_register(request, template="pages/login_register.html"):
 
'''
 Display registration and login forms
 '''

 registration_form
= RegisterForm()
 
return render(request, template, {"registration_form": registration_form})




def register(request):
 
'''
 Process user registration
 '''

 
if request.method=="POST":
  form
= RegisterForm(request.POST)
  
print form.is_valid()
  
if form.is_valid():
   form
.save()
   email
= form.cleaned_data.get("email")
   raw_password
= form.cleaned_data.get("password1")
   user
= authenticate(username=email, password=raw_password)
   login
(request, user)
   
return redirect(home_slug())
 
else:
  
return redirect(reverse("login_register"))


`login_register.html` form HTML looks like this:
 <h2>Register</h2>
 
<form method="post" action="{% url 'register' %}">
   {% csrf_token %}
   {{ registration_form.as_p }}
   
<button type="submit">Register</button>
 
</form>


When I fill out registration with an email that already exists, I get this error: `ValueError: The view theme.views.register didn't return an HttpResponse object. It returned None instead.`. That's because when `form.is_valid()` is False, there is no return value. What do I need to return so that the message on the Registration form states the email already exists?


Matemática A3K

unread,
Nov 24, 2017, 1:49:03 AM11/24/17
to django...@googlegroups.com
`views.py` has this:
def login_register(request, template="pages/login_register.html"):
 
'''
 Display registration and login forms
 '''

 registration_form
= RegisterForm()
 
return render(request, template, {"registration_form": registration_form})




def register(request):
 
'''
 Process user registration
 '''

 
if request.method=="POST":
  form
= RegisterForm(request.POST)
  
print form.is_valid()
  
if form.is_valid():
   form
.save()
   email
= form.cleaned_data.get("email")
   raw_password
= form.cleaned_data.get("password1")
   user
= authenticate(username=email, password=raw_password)
   login
(request, user)
   
return redirect(home_slug())
 
 else:
 
-> Here you should redirect back to to login_register as fallback option, for this code, try removing this "else"
  return redirect(reverse("login_register"))

 
When I fill out registration with an email that already exists, I get this error: `ValueError: The view theme.views.register didn't return an HttpResponse object. It returned None instead.`. That's because when `form.is_valid()` is False, there is no return value. What do I need to return so that the message on the Registration form states the email already exists?


When you process the form in a different view, when you redirect you will loose the form content, a better approach is to process it in the same view, this way the errors will be shown "automatically":

Or handle the errors by yourself as shown here:
:)

Tom Tanner

unread,
Nov 24, 2017, 1:08:26 PM11/24/17
to Django users
Thanks for replying. Looks like it'll be easier for me to combine these into one view.
Reply all
Reply to author
Forward
0 new messages