如何与Django一起使用Pusher?
我正在尝试使用pusher和django构建一个应用程序。我浏览了一些类似的链接,但缺少示例,因此很难理解!这里有人能帮忙吗? 还有,这里有哪些渠道,以及如何使用提要(活动流)创建跟随系统?如何与Django一起使用Pusher?,django,django-views,real-time,pusher,Django,Django Views,Real Time,Pusher,我正在尝试使用pusher和django构建一个应用程序。我浏览了一些类似的链接,但缺少示例,因此很难理解!这里有人能帮忙吗? 还有,这里有哪些渠道,以及如何使用提要(活动流)创建跟随系统? 谢谢 Pusher允许您轻松地实现一个用于消息传递的应用程序(简称pub/sub) 在这种模式中,有许多通道。每个频道就像一个电台的频率。发布者将消息放在某个频道上,任何正在收听该频道的订阅者(侦听器)都将接收消息 出版商不知道有多少人在收听某个频道,它只是发送消息。这取决于用户收听他们感兴趣的频道 实际上
谢谢 Pusher允许您轻松地实现一个用于消息传递的应用程序(简称pub/sub) 在这种模式中,有许多通道。每个频道就像一个电台的频率。发布者将消息放在某个频道上,任何正在收听该频道的订阅者(侦听器)都将接收消息 出版商不知道有多少人在收听某个频道,它只是发送消息。这取决于用户收听他们感兴趣的频道 实际上,一个频道通常包含一个事件类型;因此订阅者可以根据事件类型决定如何处理数据。这有时也称为消息类 例如,股票更新可以是一个渠道。每当库存发生变化时,发布者(您的后端脚本)就会将消息推送到该频道;任何和所有收听此频道的客户端都将收到该消息 阅读更多有关频道的信息 Pusher负责管理频道,并为您提供编写侦听器的工具 在您的示例中,每个用户都有自己的活动流通道。追随者(可以是用户)可以订阅他们感兴趣的用户的频道 您的系统只是发布所有频道的更新 在代码中,从发布服务器(后端)端,其工作方式如下(来自的示例): 从消费者(客户)方面: 一旦这是明确的,让我们转移到django
django pusherable
模块只是通过装饰视图来轻松创建频道
每个装饰的视图将自动为视图中正在访问的对象创建一个通道。每个对象都有自己的通道,名为modelclass\u pk
,因此,如果您的模型名为Book,而您刚刚创建了第一本书,则该通道将称为Book\u 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>
现在在新的浏览器选项卡中打开该视图
在另一个浏览器选项卡中,或者在django shell中,使用id 1更新该书,您会注意到javascript控制台将自动记录您的更改
如果我的数据库中有两个类,比如说,一个用于 问题和选项,创建一个问题后,它应该 出现在其追随者的提要中,以及选项中,我有吗 也要推这些选项吗?如何做到这一点 Pusher不关心数据库类是什么,也不关心数据库关系是什么。你必须自己解决这个问题 Pusher的工作仅限于在浏览器上进行“实时更新”,用户无需刷新页面
加上如何创建关系,即当一个用户跟随另一个用户时,如何 订阅它并显示相关提要 我想你们还不太明白推动者在这一切中的角色是什么 Pusher不关心您的数据库,也不知道您在数据库中的关系、与什么相关的对象以及谁在跟踪谁 pusher所做的只是使浏览器上的一个页面自动更新,而无需用户刷新 “跟随”其他用户的逻辑应该已经在应用程序中创建。也就是说,您必须具有允许用户跟随其他人的视图。一旦他们跟踪某人,将在数据库中创建/更新记录。此操作将触发Pusher为该数据库对象发布消息。现在,无论谁在该频道收听,都将收到该消息,然后可以对其执行任何操作 以下是事件/发展的顺序:
PusherUpdateMixin
from pusherable.mixins import PusherDetailMixin, PusherUpdateMixin
class BookDetail(PusherDetailMixin, DetailView):
model = Book
class BookUpdate(PusherUpdateMixin, UpdateView):
model = Book
{% 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>
def book_update(request):
obj = get_object_or_404(Book, pk=1)
return render(request, 'update.html', {'obj': obj})