一尘不染

Django Cookies,我该如何设置?

django

我有一个网站,该网站根据访问者选择的位置显示不同的内容。例如:用户输入55812作为邮政编码。我知道哪个城市和地区纬度/经度。也就是给他们有关该领域的内容。我的问题是如何将其存储在Cookie中,以便他们返回时不需要总是输入邮政编码?

我看到如下:

  1. 根据其区域设置持久性cookie。
  2. 当他们返回已读取的cookie时,获取邮政编码。
  3. 根据Cookie中的邮政编码返回内容。
    我似乎找不到有关设置Cookie的任何可靠信息。任何帮助是极大的赞赏。

阅读 358

收藏
2020-03-26

共2个答案

一尘不染

这是设置持久性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
2020-03-26
一尘不染

使用Django的会话框架应该涵盖大多数情况,但是Django现在也可以在请求和响应对象上提供直接的cookie操作方法(因此你不需要帮助函数)。

设置Cookie:

def view(request):
  response = HttpResponse('blah')
  response.set_cookie('cookie_name', 'cookie_value')

检索Cookie:

def view(request):
  value = request.COOKIES.get('cookie_name')
  if value is None:
    # Cookie is not set

  # OR

  try:
    value = request.COOKIES['cookie_name']
  except KeyError:
    # Cookie is not set
2020-03-26