python - 使用缓存时计数为 "page views"或 "hits"

标签 python django

我有一个名为 show_board 的 View 。在其中,我在每次运行时将字段 Board.views 递增 1,以计算页面浏览量。

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

我怎样才能做到这一点?

最佳答案

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

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 函数/方法:

@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))),

关于python - 使用缓存时计数为 "page views"或 "hits",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35208763/

相关文章:

python - 具有异步任务和redis的django中的线程安全

django - 如何覆盖Django AuthenticationForm输入CSS类?

python - 如何从tensorflow fully_connected获取权重

jquery - Django:具有多个查询集的 jQuery 自动完成

django - 将微数据(用于 Schema.org VideoObject)添加到我的 Django 应用程序中的页面的正确方法是什么?

python - 读取文件时字符串索引超出范围

django - 如何通过必要的数据预填充测试数据库?

python - 如何使用 FastAPI 下载大文件?

python - 在没有外部库的情况下合并具有嵌套元素的 xml 文件

python - 如何对齐组合框下拉列表中的字符?