我是Django和Python的初学者!我遇到了一个问题!
我尝试在我的软件中制作一个会话系统。当用户断开连接(通过按钮(时,用户将被重定向到连接页面。
不幸的是,form.is_valid(( 仍然有效,因此自动再次连接用户。
我不知道为什么?我该如何重置表单或 POST 值。
谢谢
托马斯
ps :连接视图的代码(在我的应用程序的 views.py(是:
def connexion(request):
contact_form = Connect(request.POST or None)
if contact_form.is_valid():
print(contact_form.cleaned_data["id"])
user_check = uc(contact_form.cleaned_data["id"], contact_form.cleaned_data["pwd"])
if user_check.identity_verified:
request.session['usr'] = user_check.get_compact_value()
return redirect(home)
else:
return render(request, 'conn\connexion.html', {'form': Connect, 'errorId': True})
del user_check
else:
return render(request, 'conn\connexion.html', {'form': Connect, 'errorId': False})
这里有两件事你应该改变。
首先,仅当请求是 POST 时,才应执行表单验证。
其次,您应该始终在发布请求后重定向,即使它返回到同一页面;这将重置值。
请注意,您的del
是在返回之后,因此永远不会被执行。但你根本不应该这样做。
你的麻烦是因为你没有遵循成功的表单提交后重定向的标准 django 模式。
def connexion(request):
contact_form = Connect(request.POST or None)
if request.method == 'POST':
if contact_form.is_valid():
print(contact_form.cleaned_data["id"])
user_check = uc(contact_form.cleaned_data["id"], contact_form.cleaned_data["pwd"])
if user_check.identity_verified:
request.session['usr'] = user_check.get_compact_value()
return redirect(home) # redirect ok
else:
return redirect('somewhere else')
return render(request, 'conn\connexion.html', {'form': Connect, 'errorId': False})
Ty,我找到 !我用ajax来调用视图(为什么?我没有回复!(现在我只用<a href='...'></a>
就可以了!