Django + nginx + gunicorn视图增加后期条目视图计数未更新 当http请求我的帖子没有更新。因为Web服务器已缓存。但我不使用webserver(nginx)缓存。
我的代码仅在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');
}
答案 0 :(得分:2)
您的观点的响应由UpdateCacheMiddleware
和FetchFromCacheMiddleware
缓存。只有第一个请求执行视图函数的代码 - 然后在缓存到期后执行每个后续请求(参见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)
# ...