gpt4 book ai didi

django - 如何在 Django 中使用 Pusher?

转载 作者:行者123 更新时间:2023-12-04 02:13:00 24 4
gpt4 key购买 nike

我正在尝试使用 pusher 和 django 构建一个应用程序。我浏览了一些链接,例如 https://github.com/pusher/django-pusherable ,但它缺少一个例子,因此很难理解!有人可以在这里帮忙吗?
还有这里的 channel 是什么,因此如何创建一个带有提要(事件流)的关注系统?
谢谢!

最佳答案

Pusher 让你轻松实现 publish/subscribe pattern用于消息传递(也简称为发布/订阅)。

在这种模式中,有许多 channel 。每个 channel 就像一个电台的频率。发布者将消息放在 channel 上,任何正在收听该 channel 的订阅者(听众)都会收到该消息。

发布者不知道有多少人在收听特定 channel ,它只是发送消息。收听他们感兴趣的 channel 取决于订阅者。

实际上,一个 channel 通常包含一个事件类型;因此订阅者可以根据事件类型决定如何处理数据。这有时也称为消息类。

例如,股票更新可以是一个 channel 。每当库存发生变化时,发布者(您的后端脚本)都会向此 channel 推送消息;任何和所有在此 channel 上收听的客户端都会收到该消息。

API guide for channels 上阅读有关 channel 的更多信息.

Pusher 负责管理 channel 并为您提供编写监听器的工具。

在您的示例中,每个用户都有自己的事件流 channel 。关注者(这些可以是用户)可以订阅收听他们感兴趣的用户的 channel 。

您的系统只是发布所有 channel 的更新。

在代码中,这将像这样工作(来自 pusher docs 的示例) - 从发布者(后端)端:

from pusher import Pusher
pusher.trigger(u'test-channel', u'my-event', {u'message': u'hello world'})

从消费者(客户端)方面:
var channel = pusher.subscribe('test-channel');
channel.bind('my-event', function(data) {
alert('An event was triggered with message: ' + data.message);
});

一旦清楚,让我们转向django。
django-pusherable模块只是通过装饰您的 View 来轻松创建 channel 。

每个被修饰的 View 都会自动为 View 中正在访问的对象创建一个 channel 。每个对象都有自己的 channel ,名为 modelclass_pk ,因此如果您的模型名为 Book,并且您刚刚创建了您的第一本书,则该 channel 将被称为 Book_1 .
from pusherable.mixins import PusherDetailMixin, PusherUpdateMixin

class BookDetail(PusherDetailMixin, DetailView):
model = Book

class BookUpdate(PusherUpdateMixin, UpdateView):
model = Book

这负责后端(推送消息)。

在前端(客户端,阅读消息),为您提供了一些模板标签。这些标签只是导入必要的 javascript 并帮助您订阅正确的事件。

每个模型有两个默认事件,更新和查看。

现在,假设您想知道 id 为 1 的书何时更新,并自动更新页面,您将在模板中编写以下内容。 obj是书的对象:
{% load pusherable_tags %}
{% pusherable_script %}
{% pusherable_subscribe 'update' obj %}

<script>
function pusherable_notify(event, data) {
console.log(data.user + "has begun to " + event + " " + data.model);
}
</script>

在您的后端,您将使用特定书籍调用此 View :
def book_update(request):
obj = get_object_or_404(Book, pk=1)
return render(request, 'update.html', {'obj': obj})

现在在新的浏览器选项卡中打开该 View 。

在另一个浏览器选项卡中,或在 django shell 中 - 使用 id 1 更新本书,您会注意到 javascript 控制台将自动记录您的更改。

How can I use it if I have 2 classes in my database like say,one for question and one for options, after creating one question it should appear in the feeds of its followers and along with options, Do I have to push the options also? How to do this?



Pusher 并不关心你的数据库类是什么,或者你的数据库关系是什么。你必须自己弄清楚这一点。

Pusher 的工作仅限于在浏览器上进行“实时更新”,而无需用户刷新页面。

Plus how to create relationships, i.e when an user follows another how to subscribe to it and show related feeds?



我想你不太明白 Pusher 在这一切中的作用是什么。

Pusher 不关心你的数据库,它不知道你在数据库中的关系,什么对象与什么有关,谁在关注谁。

pusher 所做的只是让浏览器上的一页自动更新,而无需用户刷新。

“跟随”另一个用户的逻辑应该已经在您的应用程序中创建。也就是说,您必须有一个允许用户关注其他人的 View 。一旦他们关注某人,就会在数据库中创建/更新记录。此操作将触发 Pusher 为该数据库对象发布消息。现在,在该 channel 上收听的任何人都会收到该消息,然后可以对其进行任何他们想做的事情。

这是事件/发展的顺序:
  • 首先,像往常一样创建您的应用程序。它应该具有您期望的所有功能。如果这是一个社交网络,人们应该能够关注其他人并刷新他们的个人资料页面以查看来自他们的关注者的任何更新。
  • 系统应该已经“知道”什么是更新以及为每个实体存储了什么内容。因此,如果您正在创建“用户”和“关注者”,那么应该已经有了表单、屏幕、逻辑、数据库表等,以确保内容可以由正确的用户添加、更新。
  • 一旦你把所有这些都正确地准备好并按照你喜欢的方式工作,现在你可以引入 Pusher;然后您决定要在浏览器中自动更新哪个“事件”。

  • 假设事件是“每当用户向站点添加新内容时,都应通知其所有关注者”。因此,您将执行以下操作:
  • 转到用户发布新内容时执行的 View 。
  • 如上所述更新该 View ,继承自 PusherUpdateMixin
  • 转到为用户显示的模板,其中显示了所有关注者。在此模板代码中,添加上述标签以包含 pusher javascript api。
  • 接下来,在同一个模板中,您将拥有列出该用户关注的所有用户的代码,在该逻辑代码中,您可以添加一个 div,该 div 将在该用户发布更新时“自动”更新。
  • 关于django - 如何在 Django 中使用 Pusher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315378/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com