首页 文章

在POST后重定向并传递数据时,重定向URL的持久性

提问于
浏览
0

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

但是,这意味着如果有人手动导航到'success' URL,他们将看到来自之前表单提交的"success"消息 . 我该如何预防呢?表格在 /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))

1 回答

  • 0

    您可以使用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))
    

相关问题