在 Django 中同时使用网页浏览计数器和缓存的问题

Problems using both pageview counter and cache in django

我正在为漫画创建一个 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 是我在尝试实现此解决方案时创建的装饰器:

装饰器代码如下:

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 并且运行良好)。

无论哪种方式,结果都是一样的,页面浏览量仅在缓存页面超时时更新,并且仅增加 1。我不介意缓存模板页面上的每次刷新都不会更改视图值,但我至少希望在后端增加价值。我通过在模板上引用大约 20 次然后检查管理面板并等待超时并再次刷新来验证综合浏览量的值是否发生变化,但该值没有增加超过 1.

请帮帮我。

如果您想像这样使用 cache_page 装饰器,请从您的 settings.py 中删除任何与缓存相关的中间件。中间件将负责 easy site-wide caching while the decorator is useful for more configurable page/view-specific caching.