可插拔,用于创建简单的活动流。
项目描述
关于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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2c1c20449480bcce919efac77d6ec1b3ffafa6598290292fe770e5ee9a3b7531 |
|
MD5 | f63a4acd2ea4a100ac6dbe20b00c5077 |
|
BLAKE2b-256 | a248b357335c5d32cc5ed41d019514149fdfc649f2a7254a91589fc3c29ccb9d |