2012-08-05 69 views
1

在我的django网站中,我有一个页面,如:fubar.com/signup将其自身发布,然后在成功时重定向到fubar.com/thank-you(例如,当某人签名为网站)。我想强制执行一条规则,如果该人员返回该规则,将会阻止该页面反复重新加载。我正在使用该页面来跟踪转化次数,而且我的号码已关闭,因为人们可以(并且确实)点击返回按钮返回该页面。我已经考虑检查HttpRequest.META中的HTTP_REFERER属性,但我不确定它将会如何可靠(如果它可能在不同的客户端中有不同的格式,或者根本不提供)。允许页面只在django中加载一次

有没有一个标准的方法来做到这一点? HTTP_REFERER属性可靠吗?

+0

也许你应该考虑使用不同的度量标准...... – 2012-08-05 19:51:12

+0

谢谢,但很多转换跟踪工作的方式是你必须在页面上放置一段代码。我可以将该代码封装到模板中的if语句的一个小孩中,但我仍然需要知道如何限定该语句以确保我只加载一次。 – ntaggart 2012-08-05 20:12:21

+0

我不明白你的问题。人们回到感谢页面的问题是什么?另外,我也没有理解为什么人们回到这个页面。另外,当用户尚未验证时,您可以避免“跟踪转换”(request.user.is_authenticated()) – danihp 2012-08-05 21:08:57

回答

1

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

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

request.session['conversion'] = True 

,然后将值添加到感谢页面上下文:

return direct_to_template(request, template_name, { 
    'conversion': request.session.pop('conversion', False), 
}) 

然后,您只需将转换跟踪代码封装在模板中的if语句中:

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

我认为这是更可靠,然后检查推荐人。

+0

这很好,谢谢。 – ntaggart 2012-08-06 16:53:13

1

检查HTTP_REFERER是相当可靠的;检查引用您的观点:

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 %} 

虽然尤里的回答是更通常是正确的(因为它确保了每次转换将被记录至少一次,只要用户在合理的时间内访问感谢页面),每次都会涉及会话存储。 ;)

+0

谢谢,这是非常有帮助的。 – ntaggart 2012-08-06 16:52:41