我相信有人有一个可插入的应用程序(或教程)有接近这一点,但我有麻烦找到它:我希望能够跟踪一个特定对象拥有的“视图”数量(就像stackoverflow上的一个问题有一个“视图计数”)。
如果用户没有登录,我不介意尝试放置一个cookie(或记录一个IP),这样他们就不会因为刷新页面而不经意地增加浏览量;如果一个用户已经登录,只允许他们在会话/浏览器/IP地址之间进行一次“查看”。我不认为我需要比这更花哨的东西。
我认为最好的方法是使用中间件,它与我想要跟踪的各种模型解耦,并使用F表达式(某种程度上)--StackOverflow的其他问题已经暗示了这一点(1),(2),(3)。
但我想知道这段代码是否已经存在了--因为我不是最精明的程序员,我相信有人可以做得更好。
你看过吗?
7条答案
按热度按时间uxhixvfz1#
我不确定回答我自己的问题是否是最好的选择,但经过一番努力,我组装了一个应用程序,认真地解决了这些问题:django-hitcount.
您可以在the documentation page上阅读如何使用它。
django-hitcount的想法来自我最初的两个答案(Teebes和vikingosegundo),这真的让我开始思考整个事情。
这是我第一次尝试与社区分享一个可插入的应用程序,希望其他人发现它有用。谢谢!
vs91vp4v2#
你应该使用django内置的session框架,它已经为你做了很多了。我在一个问答应用中用下面的方式实现了这个框架,我想在那里跟踪视图:
在www.example.com中models.py:
在www.example.com中views.py:
Vikingosegundo可能是对的,虽然使用内容类型可能是更可重用的解决方案,但绝对不要在跟踪会话方面重新发明轮子,Django已经这样做了!
最后一件事,你可能应该有一个记录点击的视图,要么通过Ajax调用,要么通过css链接调用,这样搜索引擎就不会加速你的计数。
希望能有所帮助!
wbrvyc0a3#
您可以创建一个通用的点击模型
在www.example.com中view.py,您可以编写以下函数:
并且您感兴趣的视图返回
这种方法给你的能力,不仅计数命中,但过滤命中历史的时间,内容类型等...
由于命中表可能增长很快,您应该考虑删除策略。
ogq8wdun4#
我知道这个问题是一个老问题,而且thornomad已经把一个应用程序来解决这个问题,并启发我与我的解决方案。我想分享这个解决方案,因为我没有找到很多关于这个主题的信息,它可能会帮助别人。我的方法是使一个通用模型可以用于任何基于视图路径(url)的视图。
d8tt03nd5#
我通过创建一个模型PageViews并在其中创建一个列"Hits"来实现这一点。每次当Homepage url被点击时。我增加列Hit的第一行也是唯一一行并将其呈现到模板中。
jgwigjjp6#
我是用cookie做的。不知道这样做是否是个好主意。下面的代码首先寻找一个已经设置好的cookie,如果它存在,它会增加total_view计数器,如果它不存在,它会增加total_views和unique_views。total_views和unique_views都是Django模型的一个字段。
twh00eeo7#
1.模特设计Post a view显示自己
发布HTML
1.集装箱altina div克拉辛icine -〉
1.标题H1依替酮阿尔蒂纳elave ele