Как я могу сравнить пароль с retypepassword при регистрации / создании учетной записи, не имея поля 'retyppassword' в models.py? - PullRequest
0 голосов
/ 13 января 2012

models.py:

class Users(models.Model):
    username = models.CharField(max_length=255)
    slug = models.CharField(max_length=255, default='0')
    password = models.CharField(max_length=300)
    passwordrepeat = models.CharField('Repeat Password', max_length=300)
    password_token = models.CharField(max_length=300, default='0')
    email = models.CharField(max_length=255)
    email_verified = models.BooleanField(default=False)
    email_token = models.CharField(max_length=255)
    email_token_expiry = models.DateTimeField(auto_now_add=True)
    tos = models.BooleanField(default=False)
    active = models.BooleanField(default=False)
    last_login = models.DateTimeField(auto_now_add=True)
    last_action = models.DateTimeField(auto_now_add=True)
    is_admin = models.BooleanField(default=False)
    role = models.CharField(max_length=255, default='0')
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.username

class UsersModelForm(forms.ModelForm):
    class Meta:
        model = Users
        fields = ('username', 'password', 'passwordrepeat', 'email')
        widgets = {
            'password' : PasswordInput(),
            'passwordrepeat' : PasswordInput(),
        }

views.py:

def register(request):
    flag = True
    possible = '0123456789abcdefghijklmnopqrstuvwxyz'
    token = ''
    length = 10
    i = 0

    current_datetime = datetime.datetime.now()

    user = UsersModelForm()
    if request.method == 'POST':
        userf = UsersModelForm(request.POST)
        username = userf.data['username']
        password = userf.data['password']
        passwordrepeat = userf.data['passwordrepeat']
        email = userf.data['email']

        if password != passwordrepeat:
            flag = False
            passVariable = {'user':user, 'flag': False}
            return render_to_response('register.html', passVariable, context_instance=RequestContext(request))

        elif password == passwordrepeat:
            while i<10:
                temp = random.choice(possible)
                token = token + temp
                i=i+1

            userf.email_token = token
            userf.email_token_expiry = current_datetime + timedelta(1)
            userf.save()
            return HttpResponseRedirect('/')
    else:
        return render_to_response('register.html', {"user": user, 'flag': True}, context_instance=RequestContext(request))

В шаблоне:

<div id="id_div_register">
    <form action="/register" method="POST">{% csrf_token %}
        {{ user.as_p }}
        <input type=submit value="Submit" />
    </form>
</div>

Эта форма создает текстовое поле repeatpassword из-за поля в models.py. Я не хочу иметь поле 'repeatpassword' в поле / столбце таблицы mysql. Но мне нужно сравнить «пароль» с «repeatpassword» в шаблоне. Как я могу это сделать?

Мне нужны «пароль» и «repeatpassword» в шаблоне для сравнения этих двух, но мне не нужен столбец / поле «repeatpassword» в таблице mysql blog_users. Как мне это сделать? Возможно ли это сделать.

Ответы [ 3 ]

13 голосов
/ 13 января 2012

ВЫ НЕ ДОЛЖНЫ НИКОГДА НИКОГДА НЕ ДЕЛАЙТЕ ЭТОГО.

Вы храните пароли пользователей в открытом виде в базе данных. Вы не должны делать это .

Django имеет полную встроенную среду аутентификации, которая заботится обо всей безопасности, необходимой для правильного хранения паролей, включая хеширование.Используй это.Это не сложно, и на самом деле это намного проще, чем сворачивать свою собственную.

Избавьтесь от небезопасной версии и используйте Django.

7 голосов
/ 13 января 2012

Вам нужно новое поле в форме, которое очищается для проверки совпадения паролей, затем вы можете удалить проверки паролей в своем представлении и заменить на form.is_valid () .Примерно так:

class UsersModelForm(forms.ModelForm):
    passwordrepeat = forms.PasswordInput()
    class Meta:
        model = Users

    def clean(self):
        cleaned_data = self.cleaned_data
        password = cleaned_data.get("password")
        passwordrepeat = cleaned_data.get("passwordrepeat")
        if password != passwordrepeat:
            raise forms.ValidationError("Passwords must match.")

        return cleaned_data
2 голосов
/ 13 января 2012

Удалить повтор пароля из модели.Расширьте UsersModelForm, чтобы вводить повтор пароля.Проверьте, совпадают ли пароли в пользовательской проверке UsersModelForm (метод is_valid ())

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