0

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

当表单is_valid()失败时,相同的登录页面显示错误消息,现在当我刷新页面时,弹出一个确认框说重新提交表单确认,

我的问题是:是否可以避免这个确认框,我试过了

        return redirect('/', {'form': form},RequestContext(request))

这将避免确认框,但有效的错误消息消失了。

4

2 回答 2

0

重定向响应本身不包含额外信息,您可以session通过序列化存储表单form.data并稍后在视图中检索它。
或者使用Ajax提交,不刷新整个页面。

于 2013-02-21T12:00:05.433 回答
0

我遇到了同样的问题,我用这个小逻辑解决了这个问题

login(request, user)
reverse_lazy('index') # here the tiny logic works 
return redirect('index')

解释

如果我们第一次按刷新时在同一页面上发生登录,它会返回该表单确认框,但在第二次重新加载时它不会显示

逻辑是使用 reverse_lazy 我已经第一次刷新,第二次页面再次返回,所以我们已经解决了问题

我的问题

但我不知道为什么在提交表单后显示确认框我需要那个答案朋友我正在等待那个

于 2020-10-29T07:25:35.717 回答