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

Django キャッシュ

高価な計算結果をキャッシュする場合、次にそれが必要になったときに再度実行することなく、以下はキャッシュがどのように動作するかの仮想コードです。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
URLが与えられた場合、そのページをキャッシュで探します
 ページがキャッシュにある場合:
    キャッシュに保存されたページを返します
 else:
    ページを生成します
    生成されたページをキャッシュに保存します(次回のために)
    生成されたページを返します

Djangoは独自のキャッシュシステムを提供しており、動的ウェブページを保存し、必要に応じて再計算を避けることができます。Djangoのキャッシュアーキテクチャの利点は、キャッシュ -

特定のビューの出力

テンプレートの一部

全体のウェブサイト

Djangoで高速キャッシュを使用するには、まずキャッシュが保存される場所を設定する必要があります。高速キャッシュフレームワークはさまざまな可能性を提供します。 - キャッシュはデータベース内、またはファイルシステム内、または直接メモリ内に保存できます。これらはプロジェクトのsettings.pyファイルで設定できます。

データベース内にキャッシュを設定

プロジェクトのsettings.pyファイルに次のように追加してください。-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
       'LOCATION': 'my_table_name',
    }
 }

この作業には、高速キャッシュテーブル「my_table_name」を作成する必要があります。これを実行するには、以下の点を確認してください。 -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
python manage.py createcachetable

ファイルシステム内に高速キャッシュを設定

プロジェクトのsettings.pyファイルに次のように追加してください。-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
       'LOCATION': '',/var/tmp/django_cache
    }
 }

メモリ内にキャッシュを設定

これは最も効果的なキャッシュ方法であり、Pythonバインドングリッドが以下のいずれかのメモリ高速キャッシュを選択した場合に使用できます。 -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
       'LOCATION': '',127.0.0.1:11211,
    }
 }

または

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
CACHES = {
    'default': {
       'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
       'LOCATION': 'unix:/tmp/memcached.sock',
    }
 }

全体のウェブサイトをキャッシュ

Djangoで高速キャッシュを使用する最も簡単な方法は、全体のウェブサイトをキャッシュすることです。これを実行するには、プロジェクトのsettings.pyのMIDDLEWARE_CLASSESオプションを編集します。以下は、オプションに追加する必要があります。-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
MIDDLEWARE_CLASSES += (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
 )

ここでの順序は非常に重要であり、ミドルウェアを取得する前に更新する必要があります。

その後、同じファイルで、以下の設定も行う必要があります。 -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
CACHE_MIDDLEWARE_ALIAS – ストレージに使用するキャッシュエイリアス。
 CACHE_MIDDLEWARE_SECONDS – 各ページがキャッシュされるべき秒数の数。

ビューのキャッシュ

特定のビューをキャッシュする場合は、Djangoに付属するcache_page修飾子を使用できます。ビューviewArticlesの結果をキャッシュしたいので、-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.views.decorators.cache import cache_page
 @cache_page(60 * 15)
 def viewArticles(request, year, month):
    text = "Displaying articles of: %s"/%s"%(year, month)
    return HttpResponse(text)

あなたが見たように、cache_pageは、ビューの結果がキャッシュされる必要がある秒数(パラメータ)です。この例では、結果が 15 分。

注 - 私たちが以前に見たように、このビューは -

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

URLにはパラメータが使用されているため、それぞれの異なる呼び出しが個別にキャッシュされます。例えば、リクエスト /myapp/articles/02/2007 それぞれキャッシュされます。 /myapp/articles/03/2008。

ビューをキャッシュすることもurl.pyファイルで直接行うことができます。以下に同じ結果があります。myappを編集するだけで良いです。/url.py ファイルを変更し(以上の)関連するマッピングURLを -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.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'),)

もちろん、それにはmyappが必要なくなります。/views.py。

テンプレートのキャッシュフィルメント

テンプレートの一部をキャッシュすることもできます。これを実行するために「cache」タグを使用します。让我们「hello.html」テンプレートを修正しましょう。 -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.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 %}
 月の最初の日。
 {% elif today == 30 %}
 月の最終日。
 {% 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 : ja.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 %}
 月の最初の日。
 {% elif today == 30 %}
 月の最終日。
 {% else %}
 I don't know.
 {% endif %}
 <p>
    {% for day in days_of_week %}
    {{day}}
 </p>
 {% endfor %}
 {% endblock %}
 {% endcache %}

上に見えるように、キャッシュタグが必要2個の引数 - 欲しいブロックがキャッシュ(秒)および名前を提供するキャッシュスライス。