English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Um teure Berechnungsergebnisse zu cachen, müssen Sie sie beim nächsten Mal nicht erneut ausführen. Hier ist ein Pseudocode, das zeigt, wie das Caching funktioniert−
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 eine URL angegeben, versuchen Sie, diese Seite im Cache zu finden if die Seite im Cache ist: die gecachte Seite zurückgeben else: die Seite generieren die generierte Seite im Cache speichern (für das nächste Mal) die generierte Seite zurückgeben
Django bietet sein eigenes Caching-System, mit dem Sie dynamische Webseiten speichern können, um sie bei Bedarf nicht neu berechnen zu müssen. Der Vorteil der Django-Caching-Architektur liegt darin, dass Sie -
Ausgabe der spezifischen Ansicht ein Teil der Vorlage gesamte Website
Um Django mit einem schnellen Cache zu verwenden, müssen Sie zunächst die Einstellungen vornehmen, wo der Cache gespeichert wird. Der Cache-Framework bietet verschiedene Möglichkeiten - Der Cache kann im Datenbank gespeichert werden, im Dateisystem oder direkt im Speicher. Dies kann in der Datei projectsettings.py des Projekts eingerichtet werden.
Fügen Sie einfach die folgenden zu der Datei projectsettings.py hinzu-
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_table_name', } }
Für diese Aufgabe und die Abwicklung der Einstellungen müssen wir den Cache-Tabelle 'my_table_name' erstellen. Für dies müssen wir Folgendes tun -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 python manage.py createcachetable
Cache im Dateisystem einrichten
Fügen Sie einfach die folgenden zu der Datei projectsettings.py hinzu-
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
Cache im Speicher einrichten
Dies ist die effektivste Methode, um den Cache zu verwenden, und es hängt davon ab, welche Python-Bindungslibrary ausgewählt wurde, dass eine schnelle Cache-Memory verwendet wird, wie in den folgenden Optionen -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
oder
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', } }
gesamte Website cachen
Die einfachste Methode, Django mit einem schnellen Cache zu verwenden, besteht darin, die gesamte Website zu cachen. Dies kann durch Bearbeiten der Option MIDDLEWARE_CLASSES in der Datei projectsettings.py erreicht werden. Folgendes muss zu der Option hinzugefügt werden-
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 MIDDLEWARE_CLASSES += ( 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', )
Bitte beachten Sie, dass die Reihenfolge hier sehr wichtig ist, die Aktualisierung sollte vor dem Erhalten der Middleware erfolgen.
Dann müssen Sie in derselben Datei auch -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 CACHE_MIDDLEWARE_ALIAS – Der Cache-Alias, der für die Speicherung verwendet werden soll. CACHE_MIDDLEWARE_SECONDS – Die Anzahl der Sekunden, die jede Seite zwischengespeichert werden sollte.
Caching von Views
Wenn Sie nicht die gesamte Website zwischenspeichern möchten, können Sie spezifische Views zwischenspeichern. Dies kann durch den mit Django verbundenen cache_page Dekorator erreicht werden. Wir möchten das Ergebnis des Views viewArticles zwischenspeichern-
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 from django.views.decorators.cache import cache_page @cache_page(60 * 15) def viewArticles(request, year, month): text = "Artikel anzeigen von: %s"/%s"%s(year, month) return HttpResponse(text)
Wie Sie sehen können, ist 'cache_page' die Anzahl der Sekunden (Parameter), die Sie wünschen, dass das Ergebnis des Views zwischengespeichert wird. In diesem Beispiel wird das Ergebnis zwischengespeichert 15 Minuten.
Anmerkung - Wie wir zuvor gesehen haben, werden die obigen Views auf -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 urlpatterns = patterns('myapp.views', url(r'^articles/(?P<month>\d{2)/(?P<year>\d{4)/', 'viewArticles', name = 'articles'),)
Da die URL Parameter verwendet, wird jeder unterschiedliche Aufruf einzeln ausgeführt. /myapp/articles/02/2007 werden各自 zwischengespeichert. /myapp/articles/03/2008.
Ein View kann auch direkt in der Datei url.py zwischengespeichert werden. Danach folgen identische Ergebnisse wie oben beschrieben. Es genügt, myapp zu bearbeiten/Die Datei url.py und ändern Sie die (obigen) zugehörigen URL-Mappings -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.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'),)
Natürlich ist es nicht mehr erforderlich, 'myapp' zu verwenden/views.py.
Caching von Template-Segmenten
Teil eines Templates kann ebenfalls zwischengespeichert werden, was durch die Verwendung des Labels 'cache' erreicht wird. Lassen Sie uns das Template 'hello.html' ändern -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 {% extends "main_template.html" %} {% block title %}My Hello Page{% endblock %} {% block content %} Hello World!!!<p>Today is {{today}}</p> We are {% if today.day == 1 %} the first day of month. {% elif today == 30 %} the last day of month. {% else %} I don't know. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} {% endblock %}
缓存内容块模板将成为 -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : de.oldtoolbag.com # Date : 2020-08-08 {% load cache %} {% extends "main_template.html" %} {% block title %}My Hello Page{% endblock %} {% cache 500 content %} {% block content %} Hello World!!!<p>Today is {{today}}</p> We are {% if today.day == 1 %} the first day of month. {% elif today == 30 %} the last day of month. {% else %} I don't know. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} {% endblock %} {% endcache %}
正如你可以在上面看到,缓存标签将需要2个参数 - 想要的块被缓存(秒)以及名称提供给缓存片段。