为什么html表单提交了两次,为什么我的Django表单要执行两次?

本文讨论了一个关于前后端交互的问题,表单2的打印语句被执行两次。作者寻求解决如何确保在用户从表单1提交数据后,表单2的'Hellofromform2'打印仅出现一次。涉及到了form1和form2的视图函数以及session的使用,目标是优化流程以提高用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有人能解释一下为什么表格2被执行了两次吗?换句话说,我会在控制台中看到2个打印语句,“Hello from form 2”。在

第一个打印语句发生在我从表单1中单击“提交”之后。第二个print语句出现在我从表单2中单击的第二个“Submit”之后。怎样才能使它只打印一次?在

视图.pydef form1 (request):

NameFormSet = formset_factory (NameForm, formset = BaseNodeFormSet, extra = 2, max_num = 5)

if request.method == 'POST':

name_formset = NameFormSet (request.POST, prefix = 'nameform')

if name_formset.is_valid ():

data = name_formset.cleaned_data

request.session ['data'] = data

return HttpResponseRedirect ('form2')

else:

name_formset = NameFormSet (prefix = 'nameform')

context = {'name_formset': name_formset}

return render (request, 'nameform/form1.html', context)

def form2 (request):

data = request.session ['data']

print ('Hello from form 2') # <==== This statement printed twice in the console

CheckBoxFormSet = formset_factory (CheckBox, extra = 2, max_num = 5)

if request.method == 'POST':

checkbox_formset = CheckBoxFormSet (request.POST, prefix = 'checkbox')

if checkbox_formset.is_valid ():

for i, form in enumerate (checkbox_formset.cleaned_data):

data [i].update (form) # Join cleaned data with original data

del request.session ['data']

context = {'data': data}

return render (request, 'nameform/success.html', context)

checkbox_formset = CheckBoxFormSet (prefix = 'checkbox')

context = {'checkbox_formset': checkbox_formset, 'data': data}

return render (request, 'nameform/form2', context)

更新1:

“print”语句实际上是一个后端方法,它处理从表单1获得的数据并将其显示在表单2中。离开现在的位置将导致该方法处理信息两次。我这样做没有问题或错误,但这是不必要的。在

例如:

^{pr2}$

更新2:

由于我的解释有点长,请允许我在这里提出一个问题。在

是的,我完全理解它为什么要处理两次。简单地回答你的问题,把getInfo放在'POST'中会给我一个上下文,未绑定的错误,因为上下文“errors”字典在第一个重定向中不存在。在context = {'data': data, 'errors': errors}

我想更新我的帖子,这样我就可以解释为什么我不能用你的方法了。GetInfo从form1获取数据,对其进行处理,并将其传递到form2进行显示。我可以在form1中完成所有这些操作,但之后我必须在form2中重做,因为form2在不通过会话的情况下将不知道“n”或“errors”是什么。我只是想看看有没有更好的方法。在

您的问题是关于 Django 注册界面两次密码不一致的提示以及重新注册。这个问题可以通过在 Django 的注册视图函数中添加逻辑来完成。 首先,您需要在注册表单中添加两个密码输入框,并将它们命名为 password1 和 password2。然后,在注册视图函数中,您可以检查这两个字段是否匹配。如果它们不匹配,您可以将错误信息添加到表单中,并重新渲染注册表单。 以下是示例代码: ```python from django.shortcuts import render, redirect from django.contrib.auth.forms import UserCreationForm from django.contrib import messages def register(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): password1 = form.cleaned_data.get('password1') password2 = form.cleaned_data.get('password2') if password1 != password2: messages.error(request, "两次密码输入不一致,请重新输入") return render(request, 'register.html', {'form': form}) form.save() messages.success(request, "注册成功") return redirect('login') else: form = UserCreationForm() return render(request, 'register.html', {'form': form}) ``` 在上面的代码中,我们首先检查请求的方法是否为 POST,如果是 POST,则使用 UserCreationForm 表单验证输入。然后,我们检查 password1 和 password2 字段是否相等。如果它们不相等,我们将错误消息添加到表单中,并重新渲染注册页面。如果表单验证成功,我们保存用户并重定向到登录页面。 希望这可以帮助您解决您的问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值