2012-08-05 71 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