Я создаю приложение django для комиксов и имею код в моем views.py такого приложения:
@comic_inc
@cache_page(settings.CACHE_S) //CACHE_S = 60
@vary_on_cookie
def comic(request, com):
try:
cobj = Comic.gen_comic(com, request.user.id)
if request.GET.get('sort') == '2':
chaps = Chapter.objects.filter(published=True, comic = cobj).order_by('num','snum','volume')
else:
chaps = Chapter.objects.filter(published=True, comic = cobj).order_by('-num','-snum','-volume')
return render(request, 'base/comic.html', {'comic': cobj, 'chapters':chaps})
except Exception as e:
return render(request, 'base/comic.html', {'error': 'Comic not found'})
@comic_inc
— это декоратор, который я создал, когда пытался реализовать это решение: Подсчет просмотров страниц или обращений при использовании кеша
код декоратора выглядит следующим образом:
def comic_inc(view_func):
def _wrapped(*args,**kwargs):
Comic.objects.filter(slug=kwargs.get('com')).update(pageviews=F('pageviews')+1)
return view_func(*args,**kwargs)
return _wrapped
Я специально не указывал никаких CACHE
в настройках django, так как уже есть кеш по умолчанию django.core.cache.backends.locmem.LocMemCache, который отлично подходит для разработки (правильно отображается на панели инструментов отладки) . Кроме того, я попробовал memcached (скачал и запустил memcached -m 512 -vvv
в CMD, и он отлично работал).
В любом случае результат был одинаковым, просмотры страниц обновляются только по истечении времени ожидания кэшированной страницы и увеличиваются только на 1. Я не возражаю, что значение просмотра не изменяется при каждом обновлении на странице кэшированного шаблона, но я, по крайней мере, хочу значение для увеличения на бэкэнде. Я проверил, меняется ли значение просмотров страниц, просматривая шаблон примерно 20 раз, а затем проверяя панель администратора, а также ожидая тайм-аута и снова обновляя, но значение не увеличилось более чем на 1.
Пожалуйста помогите.
urls.py
? - person Bernhard Vallant   schedule 19.02.2019'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware'
- person yashas123   schedule 19.02.2019cache_page
: docs .djangoproject.com/en/2.1/topics/cache/#the-per-view-cache - person Bernhard Vallant   schedule 19.02.2019