131 votes

Django Cookies, comment puis-je les configurer?

J'ai un site web qui affiche un contenu différent en fonction de l'endroit le visiteur choisit. e.g: l'Utilisateur entre dans 55812 que le zip. Je sais ce que la ville et la région lat/long. c'est-et de leur donner un contenu pertinent pour cette zone. Ma question est comment puis-je conserver ce dans un cookie afin qu' quand ils reviennent, ils ne sont pas tenus de toujours entrer leur code postal?

Je le vois comme suit:

  1. Set cookie persistant basé sur leur domaine.
  2. Lorsqu'ils retournent à la lecture cookie, saisir code postal.
  3. De retour de contenu basé sur le code postal dans leur cookie.

Je n'arrive pas à trouver toute l'information solide sur la définition d'un cookie. Tout l'aide est grandement appréciée.

275voto

Peter Points 1130

L'utilisation de la structure de session de Django devrait couvrir la plupart des scénarios, mais Django fournit également des méthodes de manipulation directe des cookies sur les objets de requête et de réponse (vous n'avez donc 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):
  if request.COOKIES.has_key( 'cookie_name' ):
    value = request.COOKIES[ 'cookie_name' ]
 

73voto

jujule Points 4353

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
 

19voto

Ben Points 4937

Vous pouvez manuellement régler le cookie, mais en fonction de votre cas d'utilisation (et si vous voulez ajouter plus de types de persistant/les données de session dans l'avenir), il pourrait faire plus de sens à l'utilisation de Django reinhardt, des séances de fonctionnalité. Cela vous permettra d' obtenir et de définir des variables liées à l'interne pour la session de l'utilisateur cookie. Cool à ce sujet est que si vous voulez stocker un grand nombre de données liées à la session d'un utilisateur, de le stocker dans tous les cookies ajouter beaucoup de poids à des requêtes et des réponses HTTP. Avec les sessions, le cookie de session est tout ce qui est envoyé en arrière et en avant (même si il y a le dessus sur Django fin de stocker les données de session à garder à l'esprit).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X