Django的活动和通知

django-actistream的Python项目详细描述


https://badge.fury.io/py/django-actistream.pnghttps://travis-ci.org/pennersr/django-actistream.pnghttps://img.shields.io/pypi/v/django-actistream.svgCoverage Statushttps://pennersr.github.io/img/bitcoin-badge.svg

处理活动和通知的小核心。

源代码
http://github.com/pennersr/django-actistream

基本原理

有很多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月作为开源发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java程序不断抛出错误。springframework。豆。工厂BeanCreationException弹簧靴   Java中的SQL SELECT语句   java如何在邻接链表中列出链表的所有成员   java为什么需要显式导入springsecurityweb依赖项?   SQLException中的java提取参数   eclipse如何使用使用java在rapidminer中创建的模型   java转换字符串列表日期列表   java是否可以使用Selenium或任何其他工具自动化RDP会话?   Scala/Java解析只有日期部分的字符串   使用AES解密时的java Stringindexoutofboundsexception   java日期类问题:日期对象被设置为我没有设置的对象   java如何修改IllegalArgumentException以包含负值?   sockets Java。net服务器示例不起作用   java每隔这么多字符就有一个空格