Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何与Django一起使用Pusher?_Django_Django Views_Real Time_Pusher - Fatal编程技术网

如何与Django一起使用Pusher?

如何与Django一起使用Pusher?,django,django-views,real-time,pusher,Django,Django Views,Real Time,Pusher,我正在尝试使用pusher和django构建一个应用程序。我浏览了一些类似的链接,但缺少示例,因此很难理解!这里有人能帮忙吗? 还有,这里有哪些渠道,以及如何使用提要(活动流)创建跟随系统? 谢谢 Pusher允许您轻松地实现一个用于消息传递的应用程序(简称pub/sub) 在这种模式中,有许多通道。每个频道就像一个电台的频率。发布者将消息放在某个频道上,任何正在收听该频道的订阅者(侦听器)都将接收消息 出版商不知道有多少人在收听某个频道,它只是发送消息。这取决于用户收听他们感兴趣的频道 实际上

我正在尝试使用pusher和django构建一个应用程序。我浏览了一些类似的链接,但缺少示例,因此很难理解!这里有人能帮忙吗? 还有,这里有哪些渠道,以及如何使用提要(活动流)创建跟随系统?
谢谢

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
  • 转到为用户显示的模板,其中显示了所有关注者。在这个模板代码中,添加上面描述的标记以包括pusher javascript api

  • 接下来,在同一个模板中,您将拥有列出该用户正在跟踪的所有用户的代码,在该逻辑代码中,您可以添加一个div,每当您
    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})