Django-Activity-Stream:构建动态活动流的全面教程

Django Activity Stream是一种用于在Django站点中生成活动流(类似于Facebook的Feed)的方法。用户可以在个人Feed页面上查看订阅的人的活动流。该方法旨在生成和展示有趣的操作流,并能够处理不同活动源的跟踪和取消关注。

图片[1]-Django-Activity-Stream:构建动态活动流的全面教程-山海云端论坛

操作事件组件

  1. Actor(执行活动的对象): 标识执行活动的实体。Activity构造必须只有一个Actor。
  2. Verb(活动操作的动词短语): 标识活动操作的IRI引用。Activity构造必须只有一个Verb。
  3. Action Object(可选,链接到操作本身的对象): 标识了活动的主要对象。Activity构造必须只有一个对象。
  4. Target(可选,对其执行活动的对象): 活动的目标是表示执行活动的对象。活动目标的确切含义取决于活动的动词。活动构造可以有一个目标,但不能有多个目标。

一、安装与配置django-activity-stream

安装

pip install django-activity-stream

在settings.py添加如下配置

<code>INSTALLED_APPS = (</code><code> 'django.contrib.auth',</code><code> 'django.contrib.sites',</code><code> ...</code><code> 'actstream'</code><code>)</code><code><br></code><code>SITE_ID = 1</code>

将活动 url 添加到 urlconf

<code>urlpatterns = [</code><code> ...</code><code> ('^activity/', include('actstream.urls')),</code><code> ...</code><code>]</code>

django-activity-stream支持sqlite、MySQL、PostgreSQL等数据库,操作自定义数据请安装扩展包

pip install django-activity-stream[jsonfield]

迁移USE_JSONFIELD

python manage.py migrate actstream

模型注册

为了使模型成为参与者、目标或动作对象,必须将它们注册到actstream。

<code># myapp/apps.py</code><code>from django.apps import AppConfig</code><code><br></code><code>class MyAppConfig(AppConfig):</code><code> name = 'myapp'</code><code><br></code><code> def ready(self):</code><code> from actstream import registry</code><code> registry.register(self.get_model('MyModel'))</code><code><br></code><code># myapp/__init__.py</code><code>default_app_config = 'myapp.apps.MyAppConfig'</code>

settings.py设置

<code>ACTSTREAM_SETTINGS = {</code><code> 'MANAGER': 'myapp.managers.MyActionManager',</code><code> 'FETCH_RELATIONS': True,#设置为禁用和查询任何流</code><code> 'USE_PREFETCH': True,#通用外键预取回退。</code><code> 'USE_JSONFIELD': True,#将此设置设置为为所有操作启用 JSONField。</code><code> 'GFK_FETCH_DEPTH': 1,#执行的关系级别数。</code><code>}</code>

二、通用生成操作

可以使用 Django Signals生成操作。为创建操作提供了特殊信号。
可以使用 Django 信号生成操作。为创建操作提供了特殊信号。

<code>from django.db.models.signals import post_save</code><code>from actstream import action</code><code>from myapp.models import MyModel</code><code><br></code><code># MyModel has been registered with actstream.registry.register</code><code><br></code><code>def my_handler(sender, instance, created, **kwargs):</code><code> action.send(instance, verb='was saved')</code><code><br></code><code>post_save.connect(my_handler, sender=MyModel)</code>

有几种方法可以在代码中生成操作。

逻辑是简单地导入动作信号,并将其与你的操作、动作、目标和任何其他重要参数一起发送。

<code>from actstream import action</code><code>from myapp.models import Group, Comment</code><code><br></code><code># User, Group & Comment have been registered with</code><code># actstream.registry.register</code><code><br></code><code>action.send(request.user, verb='reached level 10')</code><code><br></code><code>...</code><code><br></code><code>group = Group.objects.get(name='MyGroup')</code><code>action.send(request.user, verb='joined', target=group)</code><code><br></code><code>...</code><code><br></code><code>comment = Comment.create(text=comment_text)</code><code>action.send(request.user, verb='created comment', action_object=comment, target=group)</code>

操作使用 Django 的 ContentType 框架和 GenericForeignKeys 存储在数据库中的单个表中,以创建与项目中不同模型的关联。

三、自定义操作数据

django-activity-stream支持自定义数据添加到生成的任何Actions,在JSONField操作,可以随意插入和删除值。默认情况下处于禁用状态,只需在 settings.py 启用它。CTSTREAM_SETTINGS[‘USE_JSONFIELD’] = True

可以将自定义数据作为额外的关键字参数发送到信号。

<code>action.send(galahad, verb='answered', target=bridgekeeper,</code><code> favorite_color='Blue. No, yel... AAAAAAA')</code>

可以在抓取动作后检索数据字典,并随时根据需要对其进行操作。

<code>action = Action.objects.get(verb='answered', actor=galahad, target=bridgekeeper)</code><code>action.data['favorite_color']</code><code>'Blue. No, yel... AAAAAAA'</code><code>action.data['quest'] = 'To seek the Holy Grail'</code><code>action.save()</code><code>action.data</code><code>{'favorite_color': 'Blue. No, Green - AAAAAAA', 'quest': 'To seek the Holy Grail'}</code>

在模版中也可以操作

You are {{ action.actor }} your quest is {{ action.data.quest }} and your favorite color is {{ action.data.favorite_color }}

四、关注/取消关注

创建或删除与任何特定对象之间的链接就像调用函数一样简单

<code>from actstream.actions import follow, unfollow</code><code><br></code><code><em># Follow the group (where it is an actor).</em></code><code>follow(request.user, group)</code><code><br></code><code><em># Stop following the group.</em></code><code>unfollow(request.user, group)</code>

默认情况下,仅跟随作为 actor 的对象。还 包括对象是目标或action_object的活动流项, 将参数设置为:followactor_onlyFalse

follow(request.user, group, actor_only=False)

可以在经过身份验证时向视图发出请求。

<code>curl -X GET http://localhost:8000/activity/follow/<content_type_id>/<object_id>/ <em># Follow</em></code><code>curl -X GET http://localhost:8000/activity/unfollow/<content_type_id>/<object_id>/?next=/blog/ <em># Unfollow and redirect</em></code>

传递参数过程是相同的,在请求中使用=

<code>curl -X GET http://localhost:8000/activity/follow_all/<content_type_id>/<object_id>/ <em># Follow</em></code><code>curl -X GET http://localhost:8000/activity/unfollow_all/<content_type_id>/<object_id>/?next=/blog/ <em># Unfollow and redirect</em></code>

当前登录的用户将跟随content_type_id & object_id。可选参数是要重定向到的 URL。

检索追随者/追随者关系,可以使用方便的访问器

<code>from actstream.models import following, followers</code><code><br></code><code>followers(request.user) <em># returns a list of Users who follow request.user</em></code><code>following(request.user) <em># returns a list of actors who request.user is following</em></code>

若要限制以下关系的执行组件模型,只需传递模型类

<code>from django.contrib.auth.models import User, Group</code><code><br></code><code>following(request.user, User) # returns a list of users who request.user is following</code><code>following(request.user, Group) # returns a list of groups who request.user is following</code>

五、Templatetags模板标签

通过添加以下模版标签加载启动。

{% load activity_tags %}

显示流

使用 templatetag 来呈现任何内置流或自定义流。第一个参数是流方法的名称,然后将其他参数从模板传递到流函数中。

<code>{% activity_stream 'actor' user %}</code><code>{% for action in stream %}</code><code> {% display_action action %}</code><code>{% endfor %}</code>

还可以以相同的方式按名称访问自定义流。该标记将生成的查询集放入上下文变量中,默认情况下,该变量仅调用,但您可以通过传递关键字参数的值来自定义名称。

<code>{% activity_stream 'mystream' request.user 'commented' as='mycomments' %}</code><code>{% for action in mycomments %}</code><code> {% display_action action %}</code><code>{% endfor %}</code>

关注/取消关注

有两个 templatetags可以呈现关注和取消关注实体的信息。第一个是返回 url,如果不关注实体可以点击该 URL 来关注它,或者如果正在关注它则可以取消关注该实体。还有一个模板筛选器,如果用户关注给定实体,则返回 True。最终结果是一个切换的链接。

<code><a href="{% follow_url other_user %}"></code><code> {% if request.user|is_following:other_user %}</code><code> stop following</code><code> {% else %}</code><code> follow</code><code> {% endif %}</code><code></a></code>

上面的代码将为用户生成 url,以便用户仅跟踪对象为目标的操作。如果希望用户同时作为参与者和目标关注对象,则需要使用标记。

<code><a href="{% follow_all_url other_user %}"></code><code> {% if request.user|is_following:other_user %}</code><code> stop following</code><code> {% else %}</code><code> follow</code><code> {% endif %}</code><code></a></code>
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容