Django - 只能在HttpResponseRedirect之后访问页面

时间:2013-12-11 15:55:46

标签: python django redirect

我有一个基于类的视图,我在其中处理表单并在成功提交时重定向用户,如下所示:

views.py

def get(self,request):
    form = self.form_class()
    return render(request, template_name, { 'form' : form })
def post(self, request, *args, **kwargs):
    form = self.form_class(request.POST)
    if form.is_valid():
            ...
        return HttpResponseRedirect(reverse('success'))

return render(request, template_name, { 'form' : form })

urls.py

...
url(r'^submit/success', SubmitView.as_view(), name='success'),
...

可以通过输入success / submit直接访问url。我不在网站上使用任何身份验证,并希望用户只能在重定向后访问提交/成功页面,以便他们无法直接访问它。我该怎么做?

4 个答案:

答案 0 :(得分:3)

如果您使用sessions,则可以这样完成:

# in the view where form is submitted
if form.is_valid():
    request.session['form-submitted'] = True
    return HttpResponseRedirect(reverse('success'))

# in the success view
def get(self, request):
    if not request.session.get('form-submitted', False):
        # handle case where form was not submitted
    else:
        # render the template

答案 1 :(得分:1)

不是重定向,而是POST成功'页。 然后使用if request.method == 'POST': 但请注意,这是 NOT 安全,因为标头可能是欺骗性的。

最好从POST方法中调用成功视图,我认为。

答案 2 :(得分:0)

你有没有试过这样的事情:

if form.is_valid():
        ...
    return HttpResponseRedirect(SubmitView.as_view())

不确定这是否可以开箱即用,但如果有更多技巧,你可能会得到你想要的。

答案 3 :(得分:0)

要添加@ miki725发布的答案我还要确保你改变

request.session['form-submitted'] = False

输入

if not request.session.get('form-submitted', False):

为了防止直接访问页面或在浏览器上使用后退和前进。

相关问题