我正在为漫画创建一个django应用,并且在我的应用的views.py中有一个代码,如下所示:
@comic_inc
@cache_page(settings.CACHE_S) //CACHE_S = 60
@vary_on_cookie
def comic(request, com):
try:
cobj = Comic.gen_comic(com, request.user.id)
if request.GET.get('sort') == '2':
chaps = Chapter.objects.filter(published=True, comic = cobj).order_by('num','snum','volume')
else:
chaps = Chapter.objects.filter(published=True, comic = cobj).order_by('-num','-snum','-volume')
return render(request, 'base/comic.html', {'comic': cobj, 'chapters':chaps})
except Exception as e:
return render(request, 'base/comic.html', {'error': 'Comic not found'})
@comic_inc
是我在尝试实现此解决方案时创建的装饰器:Counting "page views" or "hits" when using cache
装饰器代码如下:
def comic_inc(view_func):
def _wrapped(*args,**kwargs):
Comic.objects.filter(slug=kwargs.get('com')).update(pageviews=F('pageviews')+1)
return view_func(*args,**kwargs)
return _wrapped
我没有在django设置中特别指定任何CACHE
,因为已经有一个默认缓存 django.core.cache.backends.locmem.LocMemCache 对于开发来说非常合适(正确显示在调试工具栏中)。另外,我确实尝试了memcached(在CMD中下载并运行memcached -m 512 -vvv
,效果很好)。
请帮助我。
答案 0 :(得分:1)
如果要使用settings.py
装饰器,请从cache_page
中删除所有与缓存相关的中间件。中间件将负责easy site-wide caching,而装饰器则负责more configurable page/view-specific caching。