English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Para armazenar resultados de cálculos caros, que você não precisará executar novamente quando precisar delas. Abaixo está um código pseudocódigo que explica como o cache funciona -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 dado um URL, tente encontrar essa página no cache se a página estiver no cache: retorne a página cacheada else: gerar a página salve a página gerada no cache (para a próxima vez) retorne a página gerada
O Django oferece seu próprio sistema de cache, permitindo que você salve páginas dinâmicas para evitar recalculá-las quando necessário. A vantagem da arquitetura de cache do Django é que permite que você cache -
Saída específica da view Parte do template Todo o site
Para usar cache no Django, a primeira coisa a fazer é configurar onde o cache será salvo. O framework de cache oferece várias possibilidades - O cache pode ser salvo no banco de dados, no sistema de arquivos ou diretamente na memória. Pode ser configurado no arquivo settings.py do projeto.
Basta adicionar o seguinte ao arquivo settings.py do projeto-
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'my_table_name', } }
Para essa tarefa, e completar a configuração, precisamos criar a tabela de cache 'my_table_name'. Para isso, precisamos fazer o seguinte -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 python manage.py createcachetable
Configurar cache no sistema de arquivos
Basta adicionar o seguinte ao arquivo settings.py do projeto-
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
Configurar cache na memória
Esta é a maneira mais eficaz de usar cache, você pode usá-la dependendo da biblioteca de ligação Python que escolheu o cache de memória, conforme uma das opções a seguir -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', } }
ou
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': 'unix:/tmp/memcached.sock', } }
Cachear todo o site
A maneira mais simples de usar cache rápido no Django é cachear todo o site. Isso pode ser feito editando a opção MIDDLEWARE_CLASSES no arquivo settings.py do projeto. Abaixo estão os itens que precisam ser adicionados à opção-
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 MIDDLEWARE_CLASSES += ( 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', )
Por favor, note que a ordem é muito importante, as atualizações devem ser feitas antes de obter o middleware.
Em seguida, ainda no mesmo arquivo, ainda é necessário configurar -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 CACHE_MIDDLEWARE_ALIAS – O alias de cache a ser usado para o armazenamento. CACHE_MIDDLEWARE_SECONDS – O número de segundos que cada página deve ser armazenada em cache.
Armazenamento de view
Se você não quiser armazenar todo o site em cache, pode armazenar views específicas. Isso pode ser feito usando o decorador cache_page do Django. Vamos armazenar o resultado da view viewArticles-
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 from django.views.decorators.cache import cache_page @cache_page(60 * 15) def viewArticles(request, year, month): text = "Exibindo artigos de: %s/%s"%(year, month) return HttpResponse(text)
Como você vê, cache_page é o número de segundos (parâmetro) que você deseja que o resultado da view seja armazenado em cache. No exemplo acima, o resultado será armazenado em cache 15 minutos.
Notas - Como vimos anteriormente, essas views são mapeadas para -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 urlpatterns = patterns('myapp.views', url(r'^articles/(?P<month>\d{2)/(?P<year>\d{4)/', 'viewArticles', name = 'articles'),)
Devido ao uso de parâmetros na URL, cada chamada diferente será executada em cache separadamente. Por exemplo, a solicitação /myapp/articles/02/2007 serão armazenados em cache separadamente. /myapp/articles/03/2008.
Armazenar uma view pode ser feito diretamente no arquivo url.py. Em seguida, há resultados idênticos aos mencionados acima. Basta editar myapp/arquivo url.py e alterar (os) mapeamentos de URL relevantes (acima) -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 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'),)
Claro, ele não precisa mais de myapp/views.py。
Fragmento de armazenamento de modelo
Também pode armazenar parte do modelo, o que é feito usando a etiqueta cache. Vamos modificar o modelo hello.html -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 {% extends "main_template.html" %} {% block title %}Minha Página de Olá{% endblock %} {% block content %} Hello World!!!<p>Hoje é {{today}}</p> Nós somos {% if today.day == 1 %} o primeiro dia do mês. {% elif today == 30 %} o último dia do mês. {% else %} Eu não sei. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} {% endblock %}
O template do bloco de conteúdo de cache será -
# Nome do Arquivo : example.py # Copyright : 2020 Por w3codebox # Autor por : pt.oldtoolbag.com # Data : 2020-08-08 {% load cache %} {% extends "main_template.html" %} {% block title %}Minha Página de Olá{% endblock %} {% cache 500 content %} {% block content %} Hello World!!!<p>Hoje é {{today}}</p> Nós somos {% if today.day == 1 %} o primeiro dia do mês. {% elif today == 30 %} o último dia do mês. {% else %} Eu não sei. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} {% endblock %} {% endcache %}
Como você pode ver acima, as etiquetas de cache precisarão2Um parâmetro - o bloco desejado armazenado no cache (segundos) e o nome fornecido para o fragmento de cache.