Django的活动和通知
django-actistream的Python项目详细描述
处理活动和通知的小核心。
基本原理
有很多django应用程序可以处理活动和通知, 但没有一个符合我的期望/要求:
- 操作url:它们不属于数据库/模型,因为您的数据库 记录将比url路由配置的有效期长。
- 文本和描述:它们都不属于数据库/模型。如果你需要改变 措辞或纠正一个O型,你不必把所有现有的记录都记录下来。 也做些改变但更重要的是,你需要迎合国际化, 所以这些属于模板,例如可以使用{% blocktrans %}。
- 视图:任何开箱即用的视图都不符合您的要求, 也不适合你的单页申请。
- 特定于项目的数据:actistream允许存储其他项目 每个活动的特定数据,并以性能方式标记活动。
概念
一个活动是关于一个参与者,参与到一个特定活动类型的动作中,把一个动作对象和一个目标联系起来。例如:
- john(=actor)已经发布了一条注释(=活动类型)声明“我不明白!“(=action对象)在名为”actistream for dummies“(目标)的博客文章中。
通知是针对用户的操作。所以,在简的收件箱中,你可能想显示约翰发表的评论。为此,创建一个Notice将上述活动与Jane关联
快速启动
假设您有一个名为blog的应用程序处理帖子和评论。 创建名为blog/activities.py的文件,其中包含:
from actistream.types import ActivityWrapper, ActivityType class CommentPosted(ActivityType): verbose_name = 'Comment posted' class Wrapper(ActivityWrapper): """ Wraps the generic ``Activity`` model, expose any helper methods you see fit. Notice that the action URL is not stored in the database. """ def get_action_url(self): return self.activity.action_object.get_absolute_url() def is_active(self): """ Completely optional, but just to show that it handles the case where things get deleted. """ comment = self.activity.action_object return not comment.post.is_deleted
鉴于上述情况,无论何时创建新评论,请执行以下操作:
from blog.activities import CommentPosted def some_view(request): ... activity = CommentPosted.create( target=post, # The post that gets commented actor=self.request.user, action_object=comment, # The newly posted comment )
若要通知用户有关此活动的信息,请执行以下操作:
from actistream.models import Notice notice_recipients = User.objects.filter(...) Notice.objects.send( activity, notice_recipients)
通知需要变成电子邮件。为此,您需要设置几个模板:
blog/activities/commentposted_subject.txt blog/activities/commentposted_message.txt blog/activities/commentposted_message.html
只需要.txt或.html中的一个,两者都允许组合 文本和HTML邮件
要将活动转换为HTML片段(例如要在提要中显示),请执行以下操作:
{% load actistream %} {% render_activity activity %}
这将尝试查找名为:
的模板blog/activities/commentposted_detail.html
看起来像是:
{{ activity.actor }} posted a comment to <a href="{{activity.wrapper.get_action_url}}">{{ activity.action_object.post }}</a>.
状态
自2012年开始投入生产,2016年9月作为开源发布