為了說明在Django如何cookie處理,讓我們創(chuàng)建一個使用之前創(chuàng)建的登錄功能的系統(tǒng)。 系統(tǒng)將讓你登錄為時間x分鐘,在此時間之后,應(yīng)用程序?qū)詣幼N你的登陸信息。
首先,讓我們改變登錄視圖以存儲用戶名和last_connection cookies ?
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
正如在上面這個視圖,設(shè)置cookie是調(diào)用setcookie方法完成的,而不是請求響應(yīng)的, 還要注意所有Cookie的值是作為字符串返回的。
讓我們?yōu)榈卿洷韱蝿?chuàng)建一個FormView,我們將不會顯示的表單,如果Cookie設(shè)置并且在10秒內(nèi) ?
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 視圖上訪問您設(shè)置Cookie,通過請求COOKIES類屬性(字典)完成。
現(xiàn)在修改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'))


現(xiàn)在,如果你在10秒內(nèi)訪問 /myapp/connection 一遍, 會得到直接重定向到第二個屏幕。如果你再次訪問 /myapp/connection 超出這個范圍,將會得到的登錄表單(屏幕1)。