我有一个基于类的视图,我在其中处理表单并在成功提交时重定向用户,如下所示:
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。我不在网站上使用任何身份验证,并希望用户只能在重定向后访问提交/成功页面,以便他们无法直接访问它。我该怎么做?
答案 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):
为了防止直接访问页面或在浏览器上使用后退和前进。