Django注册后无重定向且不写入数据库问题求助
Django注册表单提交无跳转、数据未写入问题解决
问题1:表单字段定义位置错误(forms.py)
UserRegistrationForm中,字段定义被错误放置在Meta类内部,导致Django无法正确识别表单字段,直接引发验证失败。
原错误代码:
class UserRegistrationForm(UserCreationForm): class Meta: model = User fields = ( 'first_name', 'last_name', 'username', 'email', 'password1', 'password2', ) first_name = forms.CharField() last_name = forms.CharField() username = forms.CharField() email = forms.CharField() password1 = forms.CharField() password2 = forms.CharField()
修复后代码:
class UserRegistrationForm(UserCreationForm): first_name = forms.CharField() last_name = forms.CharField() username = forms.CharField() email = forms.CharField(widget=forms.EmailInput) # 额外添加邮箱类型验证 password1 = forms.CharField(widget=forms.PasswordInput) password2 = forms.CharField(widget=forms.PasswordInput) class Meta: model = User fields = ( 'first_name', 'last_name', 'username', 'email', 'password1', 'password2', )
问题2:模板错误提示变量名不匹配(registration.html)
模板错误提示部分使用register_form变量,但视图传递的变量是form,导致表单验证失败时无法显示错误信息,无法定位问题原因。
原错误代码:
{% if form.errors %} <div id="form-error"> <p>errors list:</p> <ul> {% for field in register_form %} <li>{{ field.errors|striptags }}</li> {% endfor %} </ul> </div> {% endif %}
修复后代码:
{% if form.errors %} <div id="form-error"> <p>errors list:</p> <ul> {% for field in form %} {% if field.errors %} <li>{{ field.label }}: {{ field.errors|striptags }}</li> {% endif %} {% endfor %} {% for error in form.non_field_errors %} <li>{{ error|striptags }}</li> {% endfor %} </ul> </div> {% endif %}
问题3:密码输入框冗余value属性(registration.html)
密码输入框添加了value属性,不符合安全规范且可能干扰表单验证,建议移除:
原代码:
<input type="password" class="form-control form-stylereg" id="id_password1" value="{% if form.password1.value %}{{ form.password1.value }}{% endif %}" name="password1" placeholder="Your Password" required>
修复后代码:
<input type="password" class="form-control form-stylereg" id="id_password1" name="password1" placeholder="Your Password" required>
同理移除password2输入框的value属性。
调试辅助建议
在视图的form.is_valid()判断后添加调试代码,快速查看验证错误:
def registration(request): if request.method == 'POST': form = UserRegistrationForm(data=request.POST) if form.is_valid(): # ... 原逻辑 else: print(form.errors) # 控制台打印错误信息 else: form = UserRegistrationForm() return render(request, 'users/registration.html', {'form': form})
内容的提问来源于stack exchange,提问作者bensoproglib
相关产品推荐
相关产品推荐

