django - 表单 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 %}
解决方案
我这样写了自己的代码。首先你需要创建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'})
推荐阅读
- javascript - 如何检查 WebSocket.server 连接是打开还是关闭?
- python - python tkinter自我错误
- php - laravel Guzzle 发布数据数组
- angularjs - Chartjs - 数据集颜色被 angular-chartjs 超载
- java - 从 Java 调用球拍
- git - Bitnami Jenkins VM:为什么管道在第二次运行时尝试签出 git repo 时缺少权限?
- sql - SQL Server:在where条件下用逗号传递公司ID(int)
- elasticsearch - NEST (ElasticSearch) 的动态布尔查询
- python - python字典中的探测如何工作?
- javascript - Javascript - 在 iOS Safari 中打开新选项卡而不会看到弹出警告