Python Django+;nginx+;gunicorn视图增量输入后视图计数未更新
Django+nginx+gunicorn视图增量条目后视图计数未更新 http请求时,我的帖子未更新。因为web服务器是缓存的。但我不使用webserver(nginx)缓存 我的代码仅适用于django web服务器上的开发版本 我的代码 视图.pyPython 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, **
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)
# ...