У меня есть очень простое промежуточное программное обеспечение, которое отслеживает количество «ударов» объекта.Исключить промежуточное программное обеспечение из кеширования
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
Проблема заключается в том, что не работает должным образом, когда "per-site" кэш включен.
Поле «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'
Благодарим за ответ, он работает с process_request. Я могу получить resolvers_match, импортируя resolvers (resolve (request.path)). Плохая вещь, теперь каждый запрос разрешается два раза:/Но я не вижу большой разницы в производительности. Я отмечу это, как и завтра. Может быть, у кого-то есть другая идея, до тех пор – kotlet