проблема с использованием модели аутентификации пользователя django. Непонятная ошибка - PullRequest
0 голосов
/ 28 сентября 2011

Я хочу зарегистрировать пользователей.Итак, я сделал:

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 %}

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Форма не проверяется, но ваш шаблон настроен на постоянное отображение одного и того же сообщения об ошибке о несоответствии имени пользователя и пароля:

{% 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).

0 голосов
/ 28 сентября 2011

Как указывает Дейв, вы всегда показываете одно и то же сообщение, независимо от того, какая ошибка проверки. Вы должны сделать это:

{% if form.errors %}
    {{ form.errors }}
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...