【问题标题】:Django + nginx + gunicorn views Increment post entry view count not updatedDjango + nginx + gunicorn 视图增加帖子条目视图计数未更新
【发布时间】:2017-05-11 06:30:44
【问题描述】:

Django + nginx + gunicorn 视图增加帖子条目视图计数未更新 当http请求我的帖子没有更新时。因为 Web 服务器缓存了。但我不使用 webserver(nginx) 缓存。

我的代码只能在 django web 服务器上运行开发版本

我的代码

views.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)
    ...

settings.py

...

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',
)

...

【问题讨论】:

    标签: python django nginx gunicorn


    【解决方案1】:

    您的视图响应由UpdateCacheMiddlewareFetchFromCacheMiddleware 缓存。只有第一个请求会执行视图函数的代码——然后是缓存过期后的每个后续请求(请参阅CACHE_MIDDLEWARE_SECONDS)。

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

    来源:https://docs.djangoproject.com/en/dev/topics/cache/#the-per-site-cache

    您可以使用 never_cache 装饰器禁用此功能:

    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)
    
            # ...
    

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多