0

我想注册用户。所以我做了一个:

class RegisterForm(ModelForm):
    class Meta:
        model=User #(from django.auth.contrib.User)

现在我在模板中显示该表单,供用户填写并提交。当我执行 form.is_valid() 时,我收到此验证错误:Your username and password didn't match. Please try again.

有谁知道这会导致什么?我已经包含了ModelForm处理注册表单的视图和显示注册表单的模板。感谢您的时间和亲切的关心。

MY MODEL FORM
class RegisterForm(ModelForm):
    class Meta:
        model=User

THE VIEW THAT HANDLES THE REGISTRATION
def register(request):
    if request.method=='POST':
        form=RegisterForm(request.POST)
        if form.is_valid(): # HERE I GET A VALIDATION ERROR
            new_user=User.objects.create_user(username=form.cleaned_data['username'],
                                          password=form.cleaned_data['password'],
                                          email=form.cleaned_data['email'],
                                          )
            new_user.is_active=True
            new_user.first_name=form.cleaned_data['first_name']
            new_user.last_name=form.cleaned_data['lastname']
            return HttpResponseRedirect(reverse('confirm_registered'),args=[form.cleaned_data['username']])
        else:
            return render(request,'login/register.html',{'form':form})
    else:
        raise ValueError()

注册模板

{% extends "store/index2.html" %}

{% block canvas %}
<h3>Registration</h3>


{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}

<form method="post" action="/retailstore/login/register.html">
{% csrf_token %}
<table>
<tr>
    <td>{{ form.username.label_tag }}</td>
    <td>{{ form.username }}</td>
</tr>
<tr>
    <td>{{ form.password.label_tag }}</td>
    <td>{{ form.password }}</td>
</tr>
<tr>
    <td>{{ form.first_name.label_tag }}</td>
    <td>{{ form.first_name }}</td>
</tr>
<tr>
    <td>{{ form.last_name.label_tag }}</td>
    <td>{{ form.last_name }}</td>
</tr>
<tr>
    <td>{{ form.email.label_tag }}</td>
    <td>{{ form.email }}</td>
</tr>

</table>

<input type="submit" value="register" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
{% endblock %}
4

2 回答 2

1

表单未验证,但您的模板设置为始终显示有关用户名和密码不匹配的相同错误消息:

{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}

它不验证的原因可能是因为您只使用了 User 对象中的一些字段,并且 aModelForm需要所有不可编辑的字段。在 Form 的 Meta 中,设置

 fields = 'username', 'password', 'first_name', 'last_name', 'email'

告诉它只需要这些字段。

另请注意,密码不会以纯文本形式存储在数据库中,因此使用这样的密码创建用户是行不通的。你需要使用user.set_password(form_password).

于 2011-09-27T23:26:46.670 回答
0

正如 Dave 指出的那样,无论验证错误是什么,您总是会显示相同的消息。你应该做这个:

{% if form.errors %}
    {{ form.errors }}
{% endif %}
于 2011-09-28T08:08:59.860 回答