- Django 基本概念
- Django - 首頁
- Django - 基礎
- Django - 概述
- Django - 環境配置
- Django - 建立專案
- Django - 應用生命週期
- Django - 建立檢視
- Django - URL 對映
- Django - 首頁
- Django - 模板系統
- Django - MVT
- Django - 新增主模板
- Django Admin
- Django Admin - 介面
- Django Admin - 建立使用者
- Django Admin - 包含模型
- Django Admin - 設定顯示欄位
- Django Admin - 更新物件
- Django 模型
- Django - 模型
- Django - 插入資料
- Django - 更新資料
- Django - 刪除資料
- Django - 更新模型
- Django 靜態檔案
- Django - 新增靜態檔案
- Django - 新增 CSS 檔案
- Django 高階
- Django - 404 頁面未找到
- Django - 頁面重定向
- Django - 傳送郵件
- Django - 通用檢視
- Django - 表單處理
- Django - 檔案上傳
- Django - Apache 配置
- Django - Cookie 處理
- Django - Session
- Django - 快取
- Django - 評論
- Django - RSS
- Django - AJAX
- Django 有用資源
- Django - 快速指南
- Django - 有用資源
- Django - 討論
Django - Cookie 處理
有時您可能需要根據 Web 應用程式的要求,基於每個網站訪問者儲存一些資料。請始終記住,Cookie 儲存在客戶端,並且根據客戶端瀏覽器的安全級別,設定 Cookie 有時有效,有時可能無效。
為了說明在 Django 中處理 Cookie,讓我們使用之前建立的登入系統建立一個系統。該系統將讓您登入 X 分鐘,超過該時間後,您將退出應用程式。
為此,您需要設定兩個 Cookie:`last_connection` 和 `username`。
首先,讓我們更改登入檢視以儲存我們的 `username` 和 `last_connection` Cookie:
from django.template import RequestContext
def login(request):
username = "not logged in"
if request.method == "POST":
#Get the posted form
MyLoginForm = LoginForm(request.POST)
if MyLoginForm.is_valid():
username = MyLoginForm.cleaned_data['username']
else:
MyLoginForm = LoginForm()
response = render_to_response(request, 'loggedin.html', {"username" : username},
context_instance = RequestContext(request))
response.set_cookie('last_connection', datetime.datetime.now())
response.set_cookie('username', datetime.datetime.now())
return response
如上所示,設定 Cookie 是透過對響應而不是請求呼叫 `set_cookie` 方法完成的,並且請注意所有 Cookie 值都作為字串返回。
現在讓我們為登入表單建立一個 `formView`,如果 Cookie 已設定且不早於 10 秒,我們將不顯示該表單:
def formView(request):
if 'username' in request.COOKIES and 'last_connection' in request.COOKIES:
username = request.COOKIES['username']
last_connection = request.COOKIES['last_connection']
last_connection_time = datetime.datetime.strptime(last_connection[:-7],
"%Y-%m-%d %H:%M:%S")
if (datetime.datetime.now() - last_connection_time).seconds < 10:
return render(request, 'loggedin.html', {"username" : username})
else:
return render(request, 'login.html', {})
else:
return render(request, 'login.html', {})
如您在上文的 `formView` 中看到的,訪問您設定的 Cookie 是透過請求的 `COOKIES` 屬性(字典)完成的。
現在讓我們更改 `url.py` 檔案以更改 URL,使其與我們的新檢視匹配:
from django.conf.urls import patterns, url
from django.views.generic import TemplateView
urlpatterns = patterns('myapp.views',
url(r'^connection/','formView', name = 'loginform'),
url(r'^login/', 'login', name = 'login'))
訪問 `/myapp/connection` 時,您將看到以下頁面:
提交後,您將被重定向到以下螢幕:
現在,如果您在 10 秒內再次嘗試訪問 `/myapp/connection`,您將直接被重定向到第二個螢幕。如果您在此範圍之外再次訪問 `/myapp/connection`,您將看到登入表單(螢幕 1)。
廣告