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 オブジェクトの一部のフィールドのみを使用しており、編集不可のフィールドがすべてModelForm想定されているためです。フォームのメタで、設定

 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 に答える