【问题标题】:Persistence of Redirect URL when redirecting after a POST and passing data在 POST 后重定向并传递数据时重定向 URL 的持久性
【发布时间】:2015-07-18 17:28:03
【问题描述】:

成功提交表单后,我会重定向到“成功”页面,该页面会显示“谢谢”消息以及有关提交的一些信息。为此,我将 POST 数据放入会话中,重定向到相应的 URL,然后使用会话数据呈现模板。

但是,这意味着如果有人手动导航到“成功”网址,他们将看到来自之前提交的表单的“成功”消息。我该如何防止呢?表格在/register/ 处理。成功的提交被重定向到/register/success。我希望那些在浏览器中实际输入/register/success/(没有提交表单)的人看到错误页面或其他内容。怎么处理?

urls.py

url(r'^register/$', views.register, name='register'),
url(r'^register/success/$', views.registration_success, name='registration_success'), 

views.py

def register(request):
    if request.method == 'POST':
        if the_form.is_valid():
            my_id = the_form.cleaned_data['myid']
            email_addr = the_form.cleanedJ_data['emailaddr']
            request.session['registration'] = {'my_id': my_id, 'email_addr': email_addr }

            return HttpResponseRedirect(reverse('polls:registration_success'))


def registration_success(request):
    template = loader.get_template('polls/submitted.html')
    context = RequestContext(request, request.session.get('registration'))
    return HttpResponse(template.render(context))

【问题讨论】:

    标签: django django-forms http-post http-redirect


    【解决方案1】:

    您可以使用 Django 会话来实现。这是使用您的代码的示例。

    def register(request):
        if request.method == 'POST':
            if the_form.is_valid():
                my_id = the_form.cleaned_data['myid']
                email_addr = the_form.cleanedJ_data['emailaddr']
                request.session['registration'] = {'my_id': my_id, 'email_addr': email_addr }
                request.session['form-submitted'] = True
                return HttpResponseRedirect(reverse('polls:registration_success'))
    
    
    def registration_success(request):
        if not request.session.get('form-submitted', False):
            # handle the case where there is no form submitted
            return HttpResponseRedirect(reverse('polls:register'))
        template = loader.get_template('polls/submitted.html')
        context = RequestContext(request, request.session.get('registration'))
        return HttpResponse(template.render(context))
    

    【讨论】:

    • @edwinlunardo 谢谢!在没有提交表单的情况下,“get”的第二个参数是否将form-submitted设置为false? (不确定那里的默认“False”值是如何工作的......我还想确保在有人提交表单并看到“成功页面”后将 form-submitted 设置为 False,因为我不希望他们导航回来稍后到那个页面...?
    • 第二个参数不要将form-submitted设置成False,但是如果get方法没有返回form-submitted键,它会返回第二个参数。我们可以说它是没有键的默认值。
    • 好的,知道了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2019-06-21
    • 2011-05-08
    • 2014-12-21
    相关资源
    最近更新 更多