Django Cookies, как их установить? - PullRequest
109 голосов
/ 26 октября 2009

У меня есть веб-сайт, который показывает различный контент в зависимости от местоположения Посетитель выбирает. Например: пользователь вводит в 55812 в качестве почтового индекса. я знаю что город и район лат / лонг. то есть и дать им соответствующее содержание в эту область. У меня вопрос, как я могу сохранить это в cookie, чтобы когда они возвращаются, они не обязаны всегда вводить свой почтовый индекс?

Я вижу это следующим образом:

  1. Установить постоянные куки в зависимости от их области.
  2. Когда они возвращают прочитанное печенье, захватите почтовый индекс.
  3. Возврат содержимого на основе почтового индекса в их cookie.

Кажется, я не могу найти какую-либо достоверную информацию о настройке cookie. любой помощь очень ценится.

Ответы [ 3 ]

232 голосов
/ 07 апреля 2011

Использование Сеансовая структура Django должна охватывать большинство сценариев, но Django теперь также предоставляет методы прямой манипуляции cookie для объектов запроса и ответа (поэтому вам не нужна вспомогательная функция) .

Установка cookie:

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

Получение куки:

def view(request):
  if 'cookie_name' in request.COOKIES:
    value = request.COOKIES['cookie_name']
57 голосов
/ 26 октября 2009

Это помощник для установки постоянного куки:

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

ОБНОВЛЕНИЕ : проверьте Ответ Питера ниже для встроенного решения:

18 голосов
/ 26 октября 2009

Вы можете установить cookie вручную, но в зависимости от вашего варианта использования (и, если вы захотите добавить больше типов постоянных / сеансовых данных в будущем), может иметь больше смысла использовать функция сессий Django, Это позволит вам получить и установить переменные, привязанные внутренне к сеансовому куки-файлу пользователя. Крутая вещь в этом заключается в том, что если вы хотите хранить много данных, привязанных к сеансу пользователя, хранение всего этого в cookie-файлах значительно увеличит вес HTTP-запросов и ответов. В сеансах cookie-файлы сеанса - это все, что отправляется взад и вперед (хотя при хранении данных сеанса в конце работы Django возникают дополнительные затраты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...