Django Cookies处理

Django Cookies处理

有时候,根据你的 Web 应用的要求,你可能想要在每个网站访问者的基础上存储一些数据。请始终记住,Cookie 是保存在客户端的,并且根据客户端浏览器的安全级别,设置 Cookie 有时可能起作用,有时可能不起作用。

为了演示 Django 中的 Cookie 处理,让我们使用之前创建的登录系统创建一个系统。该系统将使你在一定时间内保持登录状态,在超过该时间后,你将退出应用程序。

为此,你将需要设置两个 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时,您将获得以下页面:
Django Cookies处理

提交后,您将被重定向到以下屏幕-

Django Cookies处理

现在,在10秒范围内,如果您再次尝试访问/myapp/connection,您将直接重定向到第二个屏幕。如果您在此范围之外再次访问/myapp/connection,您将得到登录表单(屏幕1)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程