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

Django 캐시

비싼 계산 결과를 캐시에 저장하려면, 다음 번 사용할 때 다시 실행하지 않아도 됩니다. 캐시가 어떻게 작동하는지 설명하는 가상 코드입니다−

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ko.oldtoolbag.com
# Date : 2020-08-08
주어진 URL을 사용하여 캐시에서 해당 페이지를 찾으려고 시도합니다
 캐시에 페이지가 있는 경우:
    캐시된 페이지를 반환합니다
 else:
    페이지를 생성합니다
    생성된 페이지를 캐시에 저장합니다(다음 번 사용을 위해)
    생성된 페이지를 반환합니다

Django는 자신의 캐시 시스템을 제공하여 동적 웹 페이지를 저장하고, 필요할 때마다 다시 계산하지 않도록 합니다. Django 캐시 아키텍처의 장점은, 캐시를缓存하도록 합니다 -

특정 뷰의 출력

템플릿의 일부

전체 웹사이트

Django에서 캐시를 사용하려면, 먼저 캐시가 저장될 위치를 설정해야 합니다. 캐시 프레임워크는 다양한 가능성을 제공합니다. - 캐시는 파일 시스템, 또는 직접 메모리에 저장될 수 있습니다. 이를 위해 프로젝트 settings.py 파일에서 설정을 완료하면 됩니다.

데이터베이스 캐시 설정

프로젝트 settings.py 파일에 다음과 같이 추가하면 됩니다.-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ko.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 : ko.oldtoolbag.com
# Date : 2020-08-08
python manage.py createcachetable

파일 시스템 캐시 설정

프로젝트 settings.py 파일에 다음과 같이 추가하면 됩니다.-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ko.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 : ko.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 : ko.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 : ko.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 : ko.oldtoolbag.com
# Date : 2020-08-08
CACHE_MIDDLEWARE_ALIAS – The cache alias to use for storage.
 CACHE_MIDDLEWARE_SECONDS – Each page should be cached for the number of seconds.

뷰 캐시

전체 웹사이트를 캐시하지 않고도 특정 뷰를 캐시할 수 있습니다. 이는 Django의 cache_page 데코레이터를 사용하여 완료할 수 있습니다. viewArticles 뷰의 결과를 캐시하려고 합니다.-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ko.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 : ko.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 : ko.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 : ko.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 : ko.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파라미터 -缓存片段提供的块被缓存的秒数以及名称。