跳转到主要内容

一个通用的视图和流行度跟踪插件,适用于Django。

项目描述

这是什么?

可插拔的django-popularity插件使得跟踪对象的查看次数并基于此生成(通用)流行度列表变得非常容易。

目前,它有对所有可能对象的查看次数、相对查看次数、新颖性和流行度的度量。

状态

该应用目前正在几个小型生产环境中使用。然而,它可能仍然存在一些小问题,并且许多功能仍然未记录。

要求

简短回答:MySQL >= 4.1.1,Django >= 1.1

长回答:目前,这仅在MySQL上进行了测试,但它可能也适用于Postgres和其他数据库(尽管SQLite可能会引起一些麻烦)。如果您成功使其工作(无论是否需要修改),请告诉我,以便其他用户也能从中受益。

随着时间的推移,我计划将大部分功能迁移到纯-Django QuerySet babble。遗憾的是,Django API中所需的功能目前还不够成熟。

安装

  1. 从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 是您的项目根目录。)

  2. 在settings.py中将流行度添加到 INSTALLED_APPS

    INSTALLED_APPS = (
        ...
        'popularity',
        ...
    )

    可选地,使用变量 POPULARITY_CHARAGE 设置对象增长“两倍老”所需的特点秒数。

    还有一个配置变量 POPULARITY_LISTSIZE,用于设置返回的“流行”项目的默认数量。

  3. 创建所需的数据结构

    cd $PROJECT_DIR
    ./manage.py syncdb
  4. 运行测试以查看一切是否正常工作

    ./manage.py test

    如果失败,请与我联系!如果没有问题:这是个好兆头,伙计!继续下一步。

  5. 通过在以下位置放置代码来注册您想要跟踪的模型,最好是在 models.py

    import popularity
    popularity.register(<mymodel>)

    这将确保为每个创建的对象创建一个 ViewTracker,并在删除特定对象时一起删除。此外,它还记录了对象的添加日期。

  6. 接下来,确保在每个查看对象的函数中添加以下代码(将 <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>)" />

    警告:如果您使用后一种方法,请注意,这会使任何人都能非常容易地为对象注册“虚假”的查看。因此,这可能被视为一个安全风险。

  7. 现在,如果您想使用您刚刚收集的信息,最简单的方法是使用包含的 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_popularmost_viewedrecently_viewedrecently_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。

  8. 现在你已经完成了。去喝啤酒。或者威士忌。或者咖啡。随心所欲。如果你仍然没有完成学习,可以尝试阅读在 popularity/models.py 中描述的许多方法,这些方法将在以后进行文档化。

致谢

Django-popularity最初由Mathijs de Bruin <mathijs@mathijsfietst.nl> 在为Visualspace <info@visualspace.nl>工作时开发。

对此项目的重大和次要贡献包括

许可证

此应用程序根据GNU Affero通用公共许可证版本3发布。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分布

django-popularity-0.2.tar.gz (25.1 kB 查看哈希)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面