- 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)。
广告