給予一個cookie的用戶肯定會工作。在網絡開發中,該技術被稱爲爲用戶創建'會話',以便每當他們從您的站點請求頁面時,該請求可以被識別爲該特定會話的一部分並相應地提供服務。
Django帶有一個出色且易於使用的會話框架。您應該閱讀文檔here,但我會總結您需要採取的步驟。
- 啓用Django會話中間件(這已經在默認的Django項目中完成了)。確保
django.contrib.sessions.middleware.SessionMiddleware
位於您設置文件中的MIDDLEWARE_CLASSES
變量中。
- 選擇會話後端。數據庫會話可以很好地工作(如果稍後性能會成爲問題,請考慮使用Memcached提供存儲的緩存會話)。
- 設置符合您要求的適當
SESSION_COOKIE_AGE
。如果您希望用戶的選擇持續很長時間,您可以將此數字設置得非常高。
完成此操作後,傳遞到視圖中的request
變量將具有session
屬性。 session
是一個可以像字典一樣用來存儲信息的對象。神奇的是,這些信息對於向您的網站發出請求的每個用戶都是唯一的。
這部分代碼演示瞭如何基於存儲在他們的會議之前選擇的用戶選擇返回內容:
def get_front_page_contents(request):
filter = request.session.get('filter_choice', False)
if filter:
# do the filtering
render_to_response(template_name,
{'filtered_content': content},
RequestContext(request))
else:
# the user has not made a choice so
# return a default result set or redirect
# to form that allows them to make a choice
你的第二個問題是如何收集這樣的選擇擺在首位。這是一個使用多頁面加載的簡單解決方案。
- 初次請求主頁時,請檢查
request.session
是否有爲此用戶保存的選項。
- 如果他們這樣做,渲染包含過濾內容的頁面(並完成)。
- 如果沒有,重定向到他們可以選擇的表單。
- 在表單提交中,爲該用戶存儲
request.session
的選擇。返回他們想要的內容。
經過此過程後,當相同的用戶在以後的日期回到第一步時,將顯示他們所需的內容。
避免頁面重新加載是一個單獨的問題,但它很容易使用JavaScript和AJAX技術完成。你可能會想要提供一個包含javascript的最小頁面來提出內容請求。可以用完全相同的方式檢查這些AJAX請求,以檢查會話數據的存在。