Django Cookies,我怎么设置它们?
我有一个网站,根据访客select的位置显示不同的内容。 例如:用户input55812作为zip。 我知道什么城市和地区纬度/长。 那就是给他们的内容与那个地区有关。 我的问题是我如何将它存储在一个cookie中,以便当他们返回时,他们不需要总是input他们的邮政编码?
我看到如下:
- 根据他们的区域设置持久性cookie。
- 当他们返回读取的cookie,抓住邮政编码。
- 根据其Cookie中的邮政编码返回内容。
我似乎无法find关于设置cookie的任何可靠信息。 任何帮助是极大的赞赏。
这是设置持久性cookie的帮手:
import datetime def set_cookie(response, key, value, days_expire = 7): if days_expire is None: max_age = 365 * 24 * 60 * 60 #one year else: max_age = days_expire * 24 * 60 * 60 expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT") response.set_cookie(key, value, max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, secure=settings.SESSION_COOKIE_SECURE or None)
在发送回应之前使用下面的代码。
def view(request): response = HttpResponse("hello") set_cookie(response, 'name', 'jujule') return response
更新 :检查@Peter下面的内置解决scheme的答案: https : //stackoverflow.com/a/5575578/174027
使用Django的会话框架应该覆盖大多数场景,但是Django现在也可以在请求和响应对象上提供直接的cookie操作方法 (所以你不需要辅助函数)。
设置一个cookie:
def view(request): response = HttpResponse('blah') response.set_cookie('cookie_name', 'cookie_value')
检索一个cookie:
def view(request): if 'cookie_name' in request.COOKIES: value = request.COOKIES['cookie_name']
您可以手动设置cookie,但根据您的使用情况(如果您将来可能需要添加更多types的持久性/会话数据),使用Django的会话function可能更有意义。 这将让你获取和设置内部绑定到用户的会话cookie的variables。 关于这一点很酷的是,如果你想存储大量与用户会话相关的数据,那么将所有数据存储在cookie中会给HTTP请求和响应增加许多权重。 在会话中,会话cookie是所有来回发送的(尽pipe在Django的结尾存储会话数据时要记住)。