简体   繁体   中英

Why my django registration form does not pass is_valid()

I am new to Django and was following a tutorial on how to build a register view. I did exactly the same but my form does not pass form.is_valid().

Here is what I did:

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

class MyRegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

class Meta:
    model = User
    fields = ('username', 'email', 'password1', 'password2')

def save(self, commit=True):
    user = super(MyRegistrationForm, self).save(commit=False)
    user.email = self.cleaned_data['email']

    if commit:
        user.save()
    return user

views.py

def register_user(request):
    if request.method == 'POST':
        form = MyRegistrationForm(request.POST)
        if form.is_valid():
            user = form.save()
        return HttpResponseRedirect('/accounts/register_success')

    form = MyRegistrationForm()
    return render(request, 'register.html', {'form':form})

def register_success(request):
    return render(request, 'register_success.html')

register.html

{% extends "base.html" %}

{% block content %}

<h2>Register</h2>
<form action="/accounts/register/" method="post">{% csrf_token %}
{{ form }}

<input type="submit" value="Register" />

</form>

{% endblock %}

When I tried to register new users on the webpage, none of them passed. Even when I used username: testuser email: testuser@example.com password:testuser123, it failed. So what is wrong?

Thanks in advance!

You should follow the correct view pattern. Put the line form = MyRegistrationForm() inside an else block, then the page itself will tell you why the form is not valid.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM