如何在python(Django)中取消设置(删除)POST变量

时间:2017-06-14 12:52:46

标签: python django session post django-views

我是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})

3 个答案:

答案 0 :(得分:2)

你应该在这里改变两件事。

首先,如果请求是POST,您应该只进行表单验证。

其次,您应该始终在发布请求后重定向,即使它返回到同一页面;这将重置值。

答案 1 :(得分:1)

请注意,您的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})

答案 2 :(得分:0)

泰, 我发现 !我使用ajax来调用视图(为什么?我没有回复!) 现在我只使用{{1}}而且没关系!