为了说明在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)。

