У меня есть очень простое промежуточное программное обеспечение, которое отслеживает количество «попаданий» объекта.
class HitCount():
def process_view(self, request, view_func, view_args, view_kwargs):
if request.resolver_match.url_name == 'article_view':
try:
Article.objects.filter(slug=view_kwargs['slug']).update(hit_count=F('hit_count')+1)
except:
pass
Проблема в том, что он не работает должным образом, когда " для каждого сайта" кеш включен.
Поле «hit_count» (PositiveIntegerField) обновляется только один раз в 5 минут (время ожидания кеша 300 с), независимо от того, сколько раз страница была посещена в течение этих «5 минут». Это не обязательно должно быть точным, потому что поле «hit_count» даже не отображается на лицевой стороне. Мне это нужно только, чтобы заказывать статьи через популярность. Но "погрешность измерения 5 минут" - это слишком. Как я могу исключить это промежуточное ПО из кэширования? Нужно ли отключать кеш для всего представления?
файл настроек, я попытался изменить порядок промежуточного программного обеспечения, но безрезультатно.
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'blog.middleware.HitCount',
'django.middleware.cache.FetchFromCacheMiddleware',
)
Посмотреть
class ArticleDetailView(DetailView):
queryset = Article.objects.published()
template_name = 'article.html'