Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django中没有确认框的情况下,如何在表单有效失败后刷新登录页面?_Python_Django_Http_Django Forms_Post Redirect Get - Fatal编程技术网

Python 在django中没有确认框的情况下,如何在表单有效失败后刷新登录页面?

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

这是我在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['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')