一个通用的视图和流行度跟踪插件,适用于Django。
项目描述
这是什么?
可插拔的django-popularity插件使得跟踪对象的查看次数并基于此生成(通用)流行度列表变得非常容易。
目前,它有对所有可能对象的查看次数、相对查看次数、新颖性和流行度的度量。
状态
该应用目前正在几个小型生产环境中使用。然而,它可能仍然存在一些小问题,并且许多功能仍然未记录。
要求
简短回答:MySQL >= 4.1.1,Django >= 1.1
长回答:目前,这仅在MySQL上进行了测试,但它可能也适用于Postgres和其他数据库(尽管SQLite可能会引起一些麻烦)。如果您成功使其工作(无论是否需要修改),请告诉我,以便其他用户也能从中受益。
随着时间的推移,我计划将大部分功能迁移到纯-Django QuerySet babble。遗憾的是,Django API中所需的功能目前还不够成熟。
安装
从Cheese Shop获取
easy_install django-popularity
或者从Github获取最新版本并将其链接到您的应用程序树
git clone git://github.com/dokterbob/django-popularity.git ln -s django-popularity/popularity $PROJECT_DIR/popularity
(这里 $PROJECT_DIR 是您的项目根目录。)
在settings.py中将流行度添加到 INSTALLED_APPS
INSTALLED_APPS = ( ... 'popularity', ... )
可选地,使用变量 POPULARITY_CHARAGE 设置对象增长“两倍老”所需的特点秒数。
还有一个配置变量 POPULARITY_LISTSIZE,用于设置返回的“流行”项目的默认数量。
创建所需的数据结构
cd $PROJECT_DIR ./manage.py syncdb
运行测试以查看一切是否正常工作
./manage.py test
如果失败,请与我联系!如果没有问题:这是个好兆头,伙计!继续下一步。
通过在以下位置放置代码来注册您想要跟踪的模型,最好是在 models.py 中
import popularity popularity.register(<mymodel>)
这将确保为每个创建的对象创建一个 ViewTracker,并在删除特定对象时一起删除。此外,它还记录了对象的添加日期。
接下来,确保在每个查看对象的函数中添加以下代码(将 <viewed_object> 替换为您正在查看的内容)
from popularity.models import ViewTracker ... ViewTracker.add_view_for(<viewed_object>)
如果您想确保应用程序在 django_popularity 不存在的情况下也能工作,请使用以下代码进行导入
import logging from django.conf import settings if 'popularity' in settings.INSTALLED_APPS: logging.debug('Django_popularity found and will be used.') from popularity.models import ViewTracker add_view_for = ViewTracker.add_view_for else: logging.warn('Django_popularity not found, creating a bogus function.') # If popularity does not exist, create a bogus function. def add_view_for(*args, **kwargs): pass `demo/testapp/views.py`.
或者,您也可以使用信号来注册实例的查看
from popularity.signals import view ... view.send(<myinstance>)
因为有多种方法可以实现这一点,所以请选择一个。它们应该同样好。如果您有偏好的方法,请告诉我,因为两个执行完全相同的功能听起来像是冗余。
最后,django-popularity 最近通过一种美丽的 AJAX 方法扩展了注册对象查看的功能。这对于交互式脚本查看对象非常有用,例如注册电影的查看。到目前为止,它仍然处于开发中,但看起来工作得相当好。(不过,作者非常欢迎更多反馈。)
要使用此功能,请将以下内容添加到您的 urls.py
urlpatterns += patterns('', ... (r'^viewtracker/', include('popularity.urls')), ... )
现在您可以通过请求 /viewtracker/<content_type_id>/<object_id>/ 的 URL 来注册查看,这可以通过两行 JavaScript(例如使用 jQuery)来实现
function add_view_for(content_type_id, object_id) { $.get('/viewtracker/' + content_type_id + '/' + object_id+'/') }
为了方便使用,有一个模板标签
{% load popularity_tags %} ... <img onclick="{{ object|viewtrack }}" />
这将渲染为
<img onclick="add_view_for(<nn>,<nn>)" />
警告:如果您使用后一种方法,请注意,这会使任何人都能非常容易地为对象注册“虚假”的查看。因此,这可能被视为一个安全风险。
现在,如果您想使用您刚刚收集的信息,最简单的方法是使用包含的 RequestContextProcessors。为此,请在您的 settings.py 中包含以下内容
TEMPLATE_CONTEXT_PROCESSORS = ( ... 'popularity.context_processors.most_popular', 'popularity.context_processors.most_viewed', 'popularity.context_processors.recently_viewed', 'popularity.context_processors.recently_added', )
在这里,前几个处理器是 Django 的默认处理器。后者分别将 most_popular、most_viewed、recently_viewed 和 recently_added 添加到 RequestContext。
(如果您不知道 RequestContext 是什么,请不要自怜。请访问 https://docs.django.ac.cn/en/dev/ref/templates/api/#id1。)
第二种方法是通过模板标签。与所有自定义标签集一样,您必须首先在模板中调用 {% load popularity_tags %}。以下有 6 个模板标签可供使用,具体描述如下。
- 标签:
views_for_object
- 用法:
{% views_for_object widget as views %}
- 描述:
检索并存储对象的查看次数到上下文变量。
- 标签:
views_for_objects
- 用法:
{% views_for_objects widget_list as view_count %}
- 描述:
检索每个对象的查看次数并将它们存储在属性中。在调用此标签后,可以通过 widget_list.view_count 访问 widget_list 中的每个 widget 的查看次数。
- 标签:
most_popular_for_model
- 用法:
{% most_popular_for_model main.model_name as popular_models %} 或 {% most_popular_for_model main.model_name as popular_models limit 20 %}
- 描述:
检索给定模型的最受欢迎实例的 ViewTrackers。如果没有给出限制,它将使用 settings.POPULARITY_LISTSIZE。模型应由应用程序名称后跟模型名称给出,例如 comments.Comment 或 auth.User。
- 标签:
most_viewed_for_model
- 用法:
{% most_viewed_for_model main.model_name as viewed_models %} 或 {% most_viewed_for_model main.model_name as viewed_models limit 20 %}
- 描述:
检索给定模型的最受查看实例的 ViewTrackers。如果没有给出限制,它将使用 settings.POPULARITY_LISTSIZE。模型应由应用程序名称后跟模型名称给出,例如 comments.Comment 或 auth.User。
- 标签:
recently_viewed_for_model
- 用法:
{% recently_viewed_for_model main.model_name as recent_models %} 或 {% recently_viewed_for_model main.model_name as recent_models limit 20 %}
- 描述:
检索给定模型最近查看实例的ViewTrackers。如果没有给出限制,将使用settings.POPULARITY_LISTSIZE。模型应通过应用程序名称后跟模型名称给出,例如comments.Comment或auth.User。
- 标签:
recently_added_for_model
- 用法:
{% recently_added_for_model main.model_name as recent_models %} 或 {% recently_added_for_model main.model_name as recent_models limit 20 %}
- 描述:
检索给定模型最近添加实例的ViewTrackers。如果没有给出限制,将使用settings.POPULARITY_LISTSIZE。模型应通过应用程序名称后跟模型名称给出,例如comments.Comment或auth.User。
现在你已经完成了。去喝啤酒。或者威士忌。或者咖啡。随心所欲。如果你仍然没有完成学习,可以尝试阅读在 popularity/models.py 中描述的许多方法,这些方法将在以后进行文档化。
致谢
Django-popularity最初由Mathijs de Bruin <mathijs@mathijsfietst.nl> 在为Visualspace <info@visualspace.nl>工作时开发。
对此项目的重大和次要贡献包括
Daniel Nordberg <dnordberg@gmail.com>
Mark Lavin <markdlavin@gmail.com>
许可证
此应用程序根据GNU Affero通用公共许可证版本3发布。
项目详情
django-popularity-0.2.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e1d0acad0fc2c987afbf8e3edd6e75ddbb463e72db2c7d96da0d1134471de1c7 |
|
MD5 | db09cd79f11f2c5403a584dff98b1290 |
|
BLAKE2b-256 | ae0d33111d1dbaaa293f6fb14bd09d29f4738582a542a57222fef5484983d131 |