Python Django+;nginx+;gunicorn视图增量输入后视图计数未更新

Python Django+;nginx+;gunicorn视图增量输入后视图计数未更新,python,django,nginx,gunicorn,Python,Django,Nginx,Gunicorn,Django+nginx+gunicorn视图增量条目后视图计数未更新 http请求时,我的帖子未更新。因为web服务器是缓存的。但我不使用webserver(nginx)缓存 我的代码仅适用于django web服务器上的开发版本 我的代码 视图.py class ArticleDetail(EntryArchiveTemplateResponseMixin, BaseDateDetailView): ... def get(self, request, *args, **

Django+nginx+gunicorn视图增量条目后视图计数未更新 http请求时,我的帖子未更新。因为web服务器是缓存的。但我不使用webserver(nginx)缓存

我的代码仅适用于django web服务器上的开发版本

我的代码

视图.py

class ArticleDetail(EntryArchiveTemplateResponseMixin,  BaseDateDetailView):
    ...
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        Article.objects.filter(pk=self.object.pk).update(views_count = F('views_count') +1)
    ...
...

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

MIDDLEWARE_CLASSES += (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

...
设置.py

class ArticleDetail(EntryArchiveTemplateResponseMixin,  BaseDateDetailView):
    ...
    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        Article.objects.filter(pk=self.object.pk).update(views_count = F('views_count') +1)
    ...
...

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

MIDDLEWARE_CLASSES += (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

...

视图的响应由
UpdateCacheMiddleware
FetchFromCacheMiddleware
缓存。只有第一个请求执行view函数的代码,然后在缓存过期后执行每个后续请求(请参阅)

FetchFromCache中间件缓存状态为的GET和HEAD响应 200,其中请求和响应头允许。对 对具有不同查询参数的相同URL的请求是 被认为是唯一的页面,并单独缓存

资料来源:

您可以使用
never\u cache
decorator禁用此功能:

from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache


class ArticleDetail(EntryArchiveTemplateResponseMixin, BaseDateDetailView):
    @method_decorator(never_cache)
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        Article.objects.filter(pk=self.object.pk).update(views_count=F('views_count') + 1)

        # ...

视图的响应由
UpdateCacheMiddleware
FetchFromCacheMiddleware
缓存。只有第一个请求执行view函数的代码,然后在缓存过期后执行每个后续请求(请参阅)

FetchFromCache中间件缓存状态为的GET和HEAD响应 200,其中请求和响应头允许。对 对具有不同查询参数的相同URL的请求是 被认为是唯一的页面,并单独缓存

资料来源:

您可以使用
never\u cache
decorator禁用此功能:

from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache


class ArticleDetail(EntryArchiveTemplateResponseMixin, BaseDateDetailView):
    @method_decorator(never_cache)
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        Article.objects.filter(pk=self.object.pk).update(views_count=F('views_count') + 1)

        # ...