允许在django中只加载一次页面

允许在django中只加载一次页面,django,http-referer,Django,Http Referer,在我的django站点中,我有一个类似于:fubar.com/signup的页面,它会自动发布,然后在成功时重定向到fubar.com/thank-you(如有人注册该站点)。我想强制执行一条规则,防止用户返回页面时页面被反复加载。我正在使用该页面跟踪转换,我的数字是关闭的,因为人们可以(而且确实)点击后退按钮返回该页面 我已经考虑过检查HttpRequest.META中的HTTP_REFERER属性,但我不确定这是否可靠(如果它可以在不同的客户机中进行不同的格式化,或者根本不提供) 有没有标准

在我的django站点中,我有一个类似于:fubar.com/signup的页面,它会自动发布,然后在成功时重定向到fubar.com/thank-you(如有人注册该站点)。我想强制执行一条规则,防止用户返回页面时页面被反复加载。我正在使用该页面跟踪转换,我的数字是关闭的,因为人们可以(而且确实)点击后退按钮返回该页面

我已经考虑过检查HttpRequest.META中的HTTP_REFERER属性,但我不确定这是否可靠(如果它可以在不同的客户机中进行不同的格式化,或者根本不提供)


有没有标准的方法可以做到这一点?HTTP\u REFERER属性可靠吗?

一种可能的解决方案是在用户会话中存储一个值。
假设每个页面都有一个单独的视图,这应该很容易

成功注册后(重定向前),在注册视图中设置会话变量:

然后将该值添加到“谢谢”页面的上下文中:

return direct_to_template(request, template_name, {
    'conversion': request.session.pop('conversion', False),
})
然后,只需将转换跟踪代码包装在模板中的if语句中:

{% if conversion %}
    {# Conversion tracking script #}
{% endif %}

我认为这比检查推荐人更可靠。

检查
HTTP\u推荐人
非常可靠;检查您视图中的推荐人:

data = {
    'foo': 'bar',
    ...
}
if request.META.get('HTTP_REFERER', False) == reverse('signup'):
    data.update({'conversion': True})
render(request, 'thanks.html', data)
然后在模板中使用该信息确定是否检测转换:

{% if conversion %}<script type='text/javascript'> // record conversion</script>{% endif %}
{%if转换%}//记录转换{%endif%}

虽然Yuri的答案更为普遍正确(因为它确保每次转换至少记录一次,只要用户在合理的时间范围内访问感谢页面),但每次都会涉及到点击会话存储。使用其中一个或两个
;) 

也许你应该考虑使用一个不同的度量…谢谢,但是很多转换跟踪工作的方式是你必须把代码片段放在页面上。我可以将代码包装到模板中的某个if语句中,但我仍然需要知道如何限定该语句,以确保只加载一次。我不太理解您的问题。人们返回感谢页面的问题是什么?而且,我不明白为什么人们会回到这个页面。另外,当用户还未进行身份验证时,您可以避免“跟踪转换”(request.user.is_authenticated())谢谢,这非常有用。
{% if conversion %}<script type='text/javascript'> // record conversion</script>{% endif %}