gpt4 book ai didi

python - Django 字段验证错误没有被引发

转载 作者:行者123 更新时间:2023-11-30 23:10:59 26 4
gpt4 key购买 nike

我正在尝试允许用户更改密码。如果表格填写正确,则会更改。但如果不是,那么就没有警告或任何东西,我只是被重定向到同一页面。我不明白为什么,我对其他形式也使用相同的方法。

我的表格:

class PasswdForm(forms.Form):
New_password = forms.CharField(widget=forms.PasswordInput(), label='New password', max_length=30)
Repeat_new_password = forms.CharField(widget=forms.PasswordInput(), label='Repeat new password', max_length=30)

class Meta:
fields = ('New_password', 'Repeat_new_password')

def clean_new_password(self):
p1 = self.cleaned_data.get('New_password')
print ("p1", p1)
if len(p1) <= 6:
print ("Password is too short. Minimum 6 symbols.")
raise forms.ValidationError(
('Password is too short. Minimum 6 symbols.'))

return p1

我实际上可以在我的终端中看到这些打印内容。

我的网址:

url(r'^loggedin/profile/passwd/$', 'userprofile.views.user_profile_passwd'),

我的功能:

@login_required
def user_profile_passwd(request):

args = {'full_name': request.user.username}
args.update(csrf(request))

if request.method == 'POST':
form = PasswdForm(request.POST)
if form.is_valid():
if form.cleaned_data['New_password'] == form.cleaned_data['Repeat_new_password']:

user = request.user
passw = make_password(form.cleaned_data['New_password'])
user.password = passw

user.save()

return render(request,'profile.html')

else:
messages.warning(request, "Your password was not changed.")
args['form'] = PasswdForm()
return render(request, 'passwd.html', args)
else:
form = PasswdForm()

args = {'full_name': request.user.username}
args.update(csrf(request))

args['form'] = PasswdForm()

return render(request, 'passwd.html', args)

有谁知道可能出了什么问题吗?

这也是我的 html 模板中的 block :

{% block content %}

<section>
<h2>Change password:</h2>

<form action="/accounts/loggedin/profile/passwd/" method="post"autocomplete="off">{% csrf_token %}

<ul>
{{form.as_ul}}
</ul>


<input type="submit" name="submit" value="Save changes">
</form>

</section>

{% endblock %}

最佳答案

当您的表单无效时,您将向 args 分配一个新的空表单。这就是为什么你看不到错误。

if request.method == 'POST':
form = PasswdForm(request.POST)
if form.is_valid():
#...
else:
messages.warning(request, "Your password was not changed.")
args['form'] = form #instead of PasswdForm()
return render(request, 'passwd.html', args)

请阅读PEP 8 ,特别是Method Names and Instance Variables 您的表单字段不应以大写字母开头。

关于python - Django 字段验证错误没有被引发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30403606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com