- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 Django 与 Django Rest Framework 和 uWSGI 一起使用。我在带有 pylibmc 后端的服务器上设置了 memcached。我为每个站点缓存配置了 Django,所以除了我使用 @never_cache 装饰器免除的 View 之外,每个 View 都应该被缓存。我不明白为什么 Django 仍然试图缓存我的 API View ,即使添加了 Django 的 @never_cache 装饰器。我有一个支持草稿模型读写操作的 API。当我使用 UpdateAPIView 进行草稿更新,然后刷新页面时,它仍然显示更新前的草稿数据。我已经确认它不是浏览器端缓存,因为网络日志显示 200 响应,而不是 304,如果我清除 memcached 并刷新页面,则正确返回更新的草稿。
这最近发生在我将 Django 从 1.8 升级到 1.10、~15 pip 包依赖项、操作系统发行版及其包时(因此很难准确指出是什么导致了它)。
DRF 检索 API View
from django.views.decorators.cache import never_cache
class DraftDetail(generics.RetrieveAPIView):
queryset = Draft.objects.all()
serializer_class = DraftSerializer
permission_classes = (permissions.IsAuthenticated, HasReadWriteAccess)
@never_cache
def dispatch(self, *args, **kwargs):
return super(DraftDetail, self).dispatch(*args, **kwargs)
from django.views.decorators.cache import never_cache
from django.utils.decorators import method_decorator
@method_decorator(never_cache, name='dispatch')
class DraftDetail(generics.RetrieveAPIView):
queryset = Draft.objects.all()
serializer_class = DraftSerializer
permission_classes = (permissions.IsAuthenticated, HasReadWriteAccess)
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': '127.0.0.1:11211',
}
}
PYLIBMC_MIN_COMPRESS_LEN = 250
# The cache alias to use for storage.
CACHE_MIDDLEWARE_ALIAS = 'default'
# The number of seconds each page should be cached.
CACHE_MIDDLEWARE_SECONDS = 500
CACHE_MIDDLEWARE_KEY_PREFIX = 'app'
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
(...),
'django.middleware.cache.FetchFromCacheMiddleware',
)
最佳答案
也许
@method_decorator(never_cache())
关于Django 仍然使用 @never_cache 装饰器缓存 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475589/
我将 Django 与 Django Rest Framework 和 uWSGI 一起使用。我在带有 pylibmc 后端的服务器上设置了 memcached。我为每个站点缓存配置了 Django,
我正在尝试在 urls.py 中使用 @never_cache 装饰器。我认为可以使用 url(r'^about/', never_cache(TemplateView.as_view(templat
我是一名优秀的程序员,十分优秀!