web-dev-qa-db-fra.com

Django Cookies, comment puis-je les configurer?

J'ai un site Web qui présente un contenu différent en fonction du lieu choisi par le visiteur. Par exemple: l'utilisateur entre 55812 en tant que Zip. Je sais quelle ville et région lat/long. c’est-à-dire et leur donner le contenu pertinent pour ce domaine. Ma question est la suivante: comment puis-je enregistrer cela dans un cookie, de sorte que, lorsqu'ils reviennent, ils ne soient pas obligés de toujours entrer leur code postal?

Je le vois comme suit:

  1. Définir un cookie persistant en fonction de leur zone.
  2. Quand ils reviennent lire le cookie, prenez le code postal.
  3. Renvoyer le contenu basé sur le code postal dans leur cookie.

Je n'arrive pas à trouver une information solide sur la création d'un cookie. Toute aide est grandement appréciée.

111
Jeffrey

Ceci est une aide pour définir un cookie persistant:

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)

Utilisez le code suivant avant d'envoyer une réponse.

def view(request):
  response = HttpResponse("hello")
  set_cookie(response, 'name', 'jujule')
  return response

[~ # ~] mettre à jour [~ # ~] : cochez la case réponse de Peter ci-dessous pour une solution intégrée:

59
jujule

L'utilisation de framework de session de Django devrait couvrir la plupart des scénarios, mais Django fournit également à présent méthodes de manipulation des cookies directs sur les objets de requête et de réponse pas besoin d'une fonction d'assistance).

Définir un cookie:

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

Récupération d'un 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
237
Peter

Vous pouvez définir le cookie manuellement, mais en fonction de votre cas d'utilisation (et si vous souhaitez éventuellement ajouter plus de types de données de session/session persistantes), il pourrait être plus logique d'utiliser fonctionnalité de sessions de Django . Cela vous laissera obtenir et définir variables liées en interne au cookie de session de l'utilisateur. La chose intéressante à propos de cela est que si vous souhaitez stocker beaucoup de données liées à la session d'un utilisateur, tout stocker dans des cookies ajoutera beaucoup de poids aux demandes et aux réponses HTTP. Avec les sessions, le cookie de session est tout ce qui est envoyé dans les deux sens (bien que Django doive garder à l'esprit la fin de la sauvegarde des données de la session).

18
Ben Regenspan