首页 > 解决方案 > 表单 as_p、错误验证、django 注册

问题描述

我在我的登录模板中使用 form.as_p。我注意到有关于密码长度的信息 - 它至少需要 8 个字母。但是,当我注册用户并输入带有 1 个字母的密码时,它不会引发任何错误。它接受这一点,但毕竟不可能用这些数据登录。你知道我该如何解决这个问题吗?我的意思是如何引发此错误并且不要让用户使用短密码注册?

{% extends 'base.html' %}

    {% block title %}Sign Up{% endblock %}

    {% block content %}
      <h2>Sign up</h2>
      <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Sign up</button>
      </form>
    {% endblock %}

标签: djangoforms

解决方案


我这样写了自己的代码。首先你需要创建forms.py

class RegisterForm(forms.ModelForm):
    username = forms.CharField(max_length=100)
    password1 = forms.CharField(max_length=100, widget=forms.PasswordInput)
    password2 = forms.CharField(max_length=100, widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = [
            'username',
            'password1',
            'password2',
        ]

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
        if len(password) < 8:
            raise ValidationError('Password too short')
        elif password1 and password2 and password1 != password2:
            raise forms.ValidationError('passwords do not match')
        return password2

然后views.py

def register_view(request):
    form = RegisterForm(request.POST or None)
    if form.is_valid():
        user = form.save(commit=False)
        password = form.cleaned_data.get('password1')
        user.set_password(password)
        user.save()
        new_user = authenticate(username=user.username, password=password)
        login(request, new_user)
        return redirect('home_app:index')
    return render(request, 'accounts/forms.html', {'form': form, 'title': 'Sign Up'})

推荐阅读