跳转到主要内容

可插拔,用于创建简单的活动流。

项目描述

关于activitystream

activitystream是用于创建简单活动流的TurboGears2的可插拔应用程序。

活动流旨在用作通知系统的底层。

目前此插件仅适用于ming,欢迎提交带有sqlalchemy支持的pull request。

安装

activitystream可以从pypi或github安装。

pip install activitystream

应该适用于大多数用户

插入activitystream

在您的应用程序config/app_cfg.py中导入plug

from tgext.pluggable import plug

然后在文件末尾调用plug和activitystream

plug(base_config, 'activitystream')

动作管理器

当您想要创建一个活动时,您应该做类似的事情

from activitystream import ActionManager
am = ActionManager()

activity = am.create(
    actor=model.User.query.find().all()[0],
    verb='created',
    target=model.Post.query.find().all()[0],
    recipients=model.User.query.find().all()[1:3],
)

然后您可能希望将活动通知给接收者。如何分配由您决定。

字段说明

  • actor:创建活动的引用

  • verb:描述动作本身的字符串,例如“创建”或“更新”

  • action_obj:对…的引用,我不知道

  • target:活动主题的引用

  • timestamp:活动的创建时间

  • description:对活动的描述的字符串

  • extra:您可以使用字符串,例如存储包含额外信息的JSON

  • recipients:预期的通知接收者的引用列表。引用可以是不同实体。

未读(未读通知计数器)

添加到您的接收者模型中(可能是您的用户模型)

from datetime import datetime
last_activity_seen = FieldProperty(s.DateTime, if_missing=datetime.utcnow())

然后您可以使用以下方式获取接收者的最新10条通知

recipient = model.User.query.find().all()[1]
actions = am.get_by_recipient(recipient).limit(10).all()
# and if you want a counter of unread notifications call
count = am.count_not_seen_by_recipient(recipient)
# you can check if the recipient have seen a notification with
not_seen = actions[0].timestamp > recipient.last_activity_seen
# don't forget to update your recipient when him reads his notifications
recipient.last_activity_seen = datetime.utcnow()

公开控制器

如果您不喜欢以activitystream开头的URL,只需使用新app_id plug

  • /activitystream/ajax_update_last_seen_of_a_recipient:通过ajax调用此接口,传入接收者的_type_id来更新last_activity_seen。应返回更新前的last_activity_seen的json数据

  • /activitystream/see:更新登录用户的last_activity_seen,并重定向到指定的target_link

通知渲染

这取决于您。建议使用tg.render_template结合tg_cache

myproject.lib.helpers中添加

from activitystream import am
from tg import render_template
def notification_cache(n):
    return {
        'cache_key': n._id,  # this is really important
        'cache_expire': 604800,  # a week
        'cache_type': 'memory',
    }

以及您希望显示通知的模板中

<py:for each="n in h.am.get_by_recipient(request.identity['user']).limit(10)">
  <li>${h.render_template(
    {'n': n, 'tg_cache': h.notification_cache(n)},
    'kajiki',
    'myproject.templates.notification'
  )}<hr/></li>
</py:for>

同时,您的myproject.templates.notification可能看起来像这样

<a href="${h.plug_url('activitystream', '/see', params={'target_link': n.target_link})}">
  <img src="${n.actor.avatar_url}"/>
  <div class="content">
    <b>${n.actor.display_name}</b> ${_(n.verb)} <i>${n.target}</i>
    <div>${n.timestamp_since}</div>
  </div>
</a>

如果您的通知需要根据接收者以不同的方式渲染,则必须使用另一种缓存策略

项目详情


下载文件

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

源分布

tgapp-activitystream-0.1.1.tar.gz (13.7 kB 查看哈希)

上传时间

由以下支持