Python 在django中没有确认框的情况下,如何在表单有效失败后刷新登录页面?
这是我在view.py中的登录函数Python 在django中没有确认框的情况下,如何在表单有效失败后刷新登录页面?,python,django,http,django-forms,post-redirect-get,Python,Django,Http,Django Forms,Post Redirect Get,这是我在view.py中的登录函数 def login_user(request): form = LoginForm(request.POST or None ) if request.method == 'POST': if form.is_valid(): username = form.cleaned_data['username'] password = form.cleaned_data['passwor
def login_user(request):
form = LoginForm(request.POST or None )
if request.method == 'POST':
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
# Redirect to a success page.
userprofile = UserProfile.objects.get(user = user)
request.session['userprofile'] = userprofile
request.session['familymembers'] = UserProfile.objects.filter(family = userprofile.family)
return redirect('/profile')
else:
# Return a 'disabled account' error message
messages.add_message(request, messages.ERROR, '.')
return redirect('/profile')
else:
messages.add_message(request, messages.ERROR, '.')
return render_to_response('registration/login.html',{'form':form},RequestContext(request))
return render_to_response('registration/login.html', {'form': form},RequestContext(request))
elif request.method == 'GET':
return render_to_response('registration/login.html',{'form':form},context_instance = RequestContext(request))
当表单有效()
失败时,会显示相同的登录页面,并显示错误消息,
现在当我刷新页面时,会弹出一个确认框,上面写着重新提交表单确认
我的问题是:是否可以避免这个确认框,我试过了
return redirect('/', {'form': form},RequestContext(request))
这将避免确认框,但有效的错误消息已消失。重定向响应本身不包含额外信息,您可以通过序列化
表单.数据将表单存储到会话中,然后在视图中检索它。
或者使用Ajax提交,这不会使整个页面刷新
我也遇到了同样的问题,我用这个小小的逻辑解决了这个问题
解释
当登录发生在同一页面时,如果我们第一次按刷新,它将返回表单确认框,但在第二次重新加载时,它将不会显示
逻辑是使用reverse_lazy,我已经第一次刷新了,第二次又返回了页面,所以我们已经解决了这个问题
我的问题
但是我不知道为什么在提交表格后会显示确认框我需要回答我正在等待的朋友请查看中的示例,并告诉我它是否有帮助。很抱歉延迟,那么你的意思是这样吗?为了使用form is_valid()我不能刷新表单页面吗?@chenliang我现在有点困惑。重定向将关闭“重新提交”对话框,但它不会携带额外信息,例如表单
,甚至表单.错误
。因此,如果要在重定向后使用form.error
,则需要将其存储在会话、cookie或重定向目标的查询字符串中。另一方面,是的,您不能重定向页面,以便在模板内使用表单
变量。
login(request, user)
reverse_lazy('index') # here the tiny logic works
return redirect('index')