我在我的Django应用程序中创建了一个需要加载身份验证的视图。如果凭据不正确,则会发回错误403页面。因为我声明视图要缓存在urls.py文件中,就像这样......
url(r'^example/example-url/(?P<special_id>\d+)/$',
cache_page(60 * 60 * 24 * 29, cache='site_cache')(views.example_view),
name="example"),
...然后甚至错误页面都被缓存了。由于缓存是29天,我无法做到这一点。此外,如果页面成功缓存,它会跳过我在视图中执行的身份验证步骤,从而使数据容易受到攻击。 我只希望django在结果成功时缓存页面,而不是在抛出错误时。此外,缓存页面应仅在视图中进行身份验证后显示。我怎么能这样做?
setting.py
中的我的缓存设置:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
},
'site_cache': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
提前致谢
答案 0 :(得分:2)
简单的解决方法。像这样更改urls.py
。
url(r'^example/example-url/(?P<special_id>\d+)/$',
views.example_view,
name="example"),
然后像这样修改你的example_view:
def example_view(request, sepcial_id):
if request.user.is_authenticated():
key = 'exmpv{0}'.format(special_id)
resp = cache.get(key)
if not resp:
# your complicated queries
resp = render('yourtemplate',your context)
cache.set(key, resp)
return resp
else:
# handle unauthorized situations
我是否也有兴趣转换到memcached而不是基于文件的缓存?