使用缓存时计算“页面视图”或“命中”

时间:2016-02-04 18:26:21

标签: python django

我有一个名为show_board的视图。除此之外,我在每次运行时将字段Board.views递增1来计算页面浏览量。

问题在于,当我在该视图上使用@cache_page装饰器时,Board.views只会在每次生成新的缓存视图时增加,而不是每次请求该视图时都会增加,就像我想要的那样到。

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:1)

你实际上可以编写另一个装饰器来实现这一点。

def view_incrementer(view_func):
    """A decorator which increments board views"""

    def _wrapped(*args, **kwargs):
        # here you can increment Board.views
        # kwargs will contain URL parameters
        pk = kwargs.get('pk')
        Board.objects.filter(pk=pk).update(views=F('views')+1)
        return view_func(*args, **kwargs)

    return _wrapped

然后将装饰器应用于您的视图功能/方法:

@view_incrememter
@cache_page(timeout=60)
def show_board(request, pk):
    ...

或者您可以直接在urls.py

中使用它
url(r'^some-path/(?P<pk>\d+)/$', view_incrementer(cache_page(60)(show_board))),