Django-캐싱
무언가를 캐시하는 것은 비용이 많이 드는 계산 결과를 저장하여 다음에 필요할 때 수행하지 않도록하는 것입니다. 다음은 캐싱이 작동하는 방식을 설명하는 의사 코드입니다.
given a URL, try finding that page in the cache
if the page is in the cache:
return the cached page
else:
generate the page
save the generated page in the cache (for next time)
return the generated page
Django는 필요할 때 다시 계산하지 않도록 동적 페이지를 저장할 수있는 자체 캐싱 시스템을 제공합니다. Django Cache 프레임 워크의 좋은 점은 캐시 할 수 있다는 것입니다.
- 특정보기의 출력입니다.
- 템플릿의 일부입니다.
- 귀하의 전체 사이트.
Django에서 캐시를 사용하려면 먼저 캐시가 유지 될 위치를 설정해야합니다. 캐시 프레임 워크는 다양한 가능성을 제공합니다. 캐시는 데이터베이스, 파일 시스템 또는 메모리에 직접 저장할 수 있습니다. 설정은settings.py 프로젝트의 파일.
데이터베이스에서 캐시 설정
프로젝트 settings.py 파일에 다음을 추가하십시오.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_table_name',
}
}
이것이 작동하고 설정을 완료하려면 캐시 테이블 'my_table_name'을 생성해야합니다. 이를 위해 다음을 수행해야합니다.
python manage.py createcachetable
파일 시스템에서 캐시 설정
프로젝트 settings.py 파일에 다음을 추가하십시오.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
메모리에 캐시 설정
이것은 가장 효율적인 캐싱 방법입니다.이를 사용하려면 메모리 캐시에 대해 선택한 Python 바인딩 라이브러리에 따라 다음 옵션 중 하나를 사용할 수 있습니다.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
Or
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'unix:/tmp/memcached.sock',
}
}
전체 사이트 캐싱
Django에서 캐시를 사용하는 가장 간단한 방법은 전체 사이트를 캐시하는 것입니다. 이는 프로젝트 settings.py에서 MIDDLEWARE_CLASSES 옵션을 편집하여 수행됩니다. 옵션에 다음을 추가해야합니다-
MIDDLEWARE_CLASSES += (
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
여기서 순서는 중요합니다. 업데이트는 Fetch 미들웨어보다 먼저 와야합니다.
그런 다음 동일한 파일에서 다음을 설정해야합니다.
CACHE_MIDDLEWARE_ALIAS – The cache alias to use for storage.
CACHE_MIDDLEWARE_SECONDS – The number of seconds each page should be cached.
뷰 캐싱
전체 사이트를 캐시하지 않으려면 특정보기를 캐시 할 수 있습니다. 이것은cache_pageDjango와 함께 제공되는 데코레이터. 결과를 캐시하고 싶다고합시다.viewArticles 보기-
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 분 동안 캐시됩니다.
Note − 위의보기가지도에 표시되기 전에 확인했듯이 −
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 (위)을 다음과 같이 변경하십시오.
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 템플릿 −
{% 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 %}
콘텐츠 블록을 캐시하기 위해 템플릿은 다음과 같습니다.
{% 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 개의 매개 변수가 필요합니다. 블록을 캐시 할 시간 (초)과 캐시 조각에 이름을 지정할 수 있습니다.