English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

缓存 Django

Pour stocker des résultats de calcul coûteux, que vous n'avez pas besoin de réexécuter la prochaine fois que vous en avez besoin. Voici un code pseudo pour expliquer comment fonctionne le cache -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
donné une URL, essayez de trouver cette page dans le cache
 si la page est dans le cache:
    retourner la page en cache
 sinon:
    générer la page
    enregistrer la page générée dans le cache (pour la prochaine fois)
    retourner la page générée

Django propose son propre système de cache, qui vous permet de sauvegarder des pages web dynamiques pour éviter de les recalculer lorsque vous en avez besoin. L'un des avantages de l'architecture de cache de Django est qu'elle vous permet de -

La sortie de la vue spécifique

Une partie du modèle

Tout le site Web

Pour utiliser le cache dans Django, la première chose à faire est de configurer où le cache sera stocké. Le cadre de cache propose différentes possibilités - Le cache peut être stocké dans la base de données, sur le système de fichiers, ou directement en mémoire. Il peut être configuré dans le fichier settings.py du projet.

Configurer le cache dans la base de données

Ajoutez simplement ce qui suit au fichier settings.py du projet-

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
       'LOCATION': 'my_table_name',
    }
 }

Pour cette tâche, et terminer la configuration, nous devons créer une table de cache 'my_table_name'. Pour cela, il faut faire ce qui suit -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
python manage.py createcachetable

Configurer le cache sur le système de fichiers

Ajoutez simplement ce qui suit au fichier settings.py du projet-

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
       'LOCATION': '',/var/tmp/django_cache
    }
 }

Configurer le cache en mémoire

C'est la méthode la plus efficace pour mettre en cache, vous pouvez l'utiliser cela dépend de la bibliothèque de liaison Python choisie pour le cache rapide en mémoire, comme l'une des options suivantes -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
       'LOCATION': '',127.0.0.1:11211,
    }
 }

ou

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
       'LOCATION': 'unix:/tmp/memcached.sock',
    }
 }

Mettre en cache tout le site Web

La méthode la plus simple pour utiliser un cache rapide dans Django consiste à mettre en cache tout le site Web. Cela peut être fait en éditant l'option MIDDLEWARE_CLASSES du fichier settings.py du projet. Voici ce qui doit être ajouté à l'option-

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
MIDDLEWARE_CLASSES += (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
 )

Veuillez noter que l'ordre est important ici, la mise à jour doit être effectuée avant d'obtenir le middleware.

Ensuite, dans le même fichier, il faut également configurer -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
CACHE_MIDDLEWARE_ALIAS - L'alias de cache à utiliser pour le stockage.
 CACHE_MIDDLEWARE_SECONDS - Le nombre de secondes pendant lesquelles chaque page doit être mise en cache.

Mettre en cache la vue

Si vous ne souhaitez pas mettre en cache tout le site, vous pouvez mettre en cache des vues spécifiques. Cela peut être réalisé en utilisant le modificateur cache_page fourni par Django. Nous devons mettre en cache le résultat de la vue viewArticles-

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.views.decorators.cache import cache_page
 @cache_page(60 * 15)
 def viewArticles(request, year, month):
    text = "Affichage des articles de : %s/%s"% (year, month)
    return HttpResponse(text)

Comme vous le voyez, cache_page est le nombre de secondes (paramètre) pendant lesquelles vous souhaitez que le résultat du vue soit mis en cache. Dans cet exemple, le résultat sera mis en cache 15 minutes.

Remarque - Comme nous l'avons vu précédemment, cette vue est mappée à -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
urlpatterns = patterns('myapp.views',
    url(r'^articles/(?P<month>\d{2)/(?P<year>\d{4)/', 'viewArticles', name = 'articles'),)

En raison de l'utilisation de paramètres d'URL, chaque appel différent sera exécuté en cache de manière distincte. Par exemple, la requête /myapp/articles/02/2007 seront mis en cache respectivement /myapp/articles/03/2008.

Mettre en cache une vue peut également être réalisé directement dans le fichier url.py. Ensuite, il y a des résultats similaires à ceux mentionnés précédemment. Il suffit de modifier myapp/url.py fichier et modifier (ci-dessus) les correspondances URL pertinentes -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
urlpatterns = patterns('myapp.views',
    url(r'^articles/(?P<month>\d{2)/(?P<year>\d{4)/, 
    cache_page(60 * 15)(viewArticles), name = 'articles'),)

Bien sûr, il n'a plus besoin de myapp/views.py.

Mettre en cache des fragments de modèle

Il est également possible de mettre en cache une partie du modèle, ce qui est réalisé en utilisant la balise cache. Permettons de modifier le modèle hello.html. -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
{% extends "main_template.html" %}
 {% block title %}Ma page d'accueil Hello{% endblock %}
 {% block content %}
 Hello World!!!<p>Aujourd'hui est {{today}}</p>
 Nous sommes
 {% if today.day == 1 %}
 le premier jour du mois.
 {% elif today == 30 %}
 le dernier jour du mois.
 {% else %}
 Je ne sais pas.
 {% endif %}
 <p>
    {% for day in days_of_week %}
    {{day}}
 </p>
 {% endfor %}
 {% endblock %}

Le bloc de contenu de cache deviendra }} -

# Fichier : example.py
# Copyright : 2020 Par w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
{% load cache %}
 {% extends "main_template.html" %}
 {% block title %}Ma page d'accueil Hello{% endblock %}
 {% cache 500 content %}
 {% block content %}
 Hello World!!!<p>Aujourd'hui est {{today}}</p>
 Nous sommes
 {% if today.day == 1 %}
 le premier jour du mois.
 {% elif today == 30 %}
 le dernier jour du mois.
 {% else %}
 Je ne sais pas.
 {% endif %}
 <p>
    {% for day in days_of_week %}
    {{day}}
 </p>
 {% endfor %}
 {% endblock %}
 {% endcache %}

正如你可以在上面看到,缓存标签将需要2个参数 - 想要的块被缓存(秒)以及名称提供给缓存片段。