為了說明在Django如何cookie處理,讓我們建立一個使用之前建立的登入功能的系統。 系統將讓你登入為時間x分鐘,在此時間之後,應用程式將會自動登出你的登陸資訊。
首先,讓我們改變登入檢視以儲存使用者名和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
正如在上面這個檢視,設定cookie是呼叫setcookie方法完成的,而不是請求響應的, 還要注意所有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'))
現在,如果你在10秒內存取 /myapp/connection 一遍, 會得到直接重定向到第二個螢幕。如果你再次存取 /myapp/connection 超出這個範圍,將會得到的登入表單(螢幕1)。