Django + nginx + gunicorn视图增加后期条目视图计数未更新

时间:2017-05-11 06:30:45

标签: python django nginx gunicorn

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

enter image description here

我的代码仅在django Web服务器上使用开发版本

我的代码

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

...

settings.py

editor.addButton('lsplus', {
text: '+',
tooltip: 'letter-spacing +',
icon: false,
onclick: function () {
    var currentFontSize = 0;
    if ($(tinyMCE.activeEditor.selection.getNode()).css('letter-spacing')) {
        currentFontSize = new Number($(tinyMCE.activeEditor.selection.getNode())
            .css('letter-spacing').replace('px', ''));
    }
    currentFontSize = currentFontSize + 1;
    tinymce.activeEditor.formatter.register('lsplus', {
        inline : 'span',
        styles: { 'letter-spacing': currentFontSize + 'px' }
    });
    tinymce.activeEditor.formatter.apply('lsplus');
}

1 个答案:

答案 0 :(得分:2)

您的观点的响应由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)

        # ...