2010-02-18 1 views
5

Lorsqu'un utilisateur demande la même page, avec les mêmes données ... Je voudrais que Django renvoie un 304, de sorte que le navigateur n'ait pas à recharger la page.Comment faire pour intégrer un 304 dans Django?

Je ne suis pas familier avec ça. Comment cela peut-il être fait?

Merci.

Répondre

12

Il y a description détaillée dans la documentation Django: Conditional view processing

outils suivants sont particulièrement utiles:

  1. @last_modified et @etag décorateurs de vue. Vous leur fournissez une fonction pour calculer la valeur à partir de la requête et tout le reste est fait automatiquement.
  2. django.middleware.http.ConditionalGetMiddleware - il génère l'ETag requis et renvoie 304 s'il y a un succès de cache, mais cela prend encore du temps au serveur pour générer du code HTML complet et seul le temps réseau est sauvegardé. Toujours très bon pour le changement de configuration d'une ligne.
6

Vous pouvez regarder dans caching system de Django, ou si vous pouvez facilement vérifier si l'utilisateur demande les mêmes données, vous pouvez renvoyer un HttpResponseNotModified() - cela renvoie un 304. Vérifiez les docs here.

+2

La mise en cache côté serveur est utile, mais sans rapport avec HTTP 304. Et il est vrai que vous pouvez renvoyer HttpResponseNotModified vous-même, mais Django possède déjà des mécanismes intégrés pour vérifier la même réponse et renvoyer le 304 pour vous; voir la réponse d'Alex Lebedev. –

+0

Merci Carl, je ne le savais pas! J'ai encore beaucoup à apprendre sur Django. – hora

Questions connexes