2015-07-09 1 views
5

Я пытаюсь создать приложение, используя pusher и django. Я просмотрел несколько ссылок, таких как https://github.com/pusher/django-pusherable, но ему не хватило примера и поэтому было трудно понять! Кто-нибудь может помочь здесь? А также какие здесь каналы и как создать следующую систему с помощью фидов (потоков активности)? Спасибо!Как использовать Pusher с Django?

+0

Это сообщение в блоге об этом пакете находится по адресу https://blog.pusher.com/django-pusherable/. – argaen

+0

Я уже прошел через это! –

+0

[Mixins] (https://github.com/pusher/django-pusherable#mixins) и [Теги шаблона] (https://github.com/pusher/django-pusherable#template-tags) разделы README предоставить вам примеры кода, который требуется. Можете ли вы указать пример кода, который вы пытаетесь использовать с тезисами mixins и некоторым примером клиентского кода? – leggetter

ответ

7

Pusher позволяет легко реализовать publish/subscribe pattern для обмена сообщениями (также называемый pub/sub для краткости).

В этом шаблоне есть несколько каналов. Каждый канал похож на частоту радиостанции. Издатель помещает сообщения на канал, и все подписчики (слушатели), которые слушают этот канал, получат сообщение.

Издатель не знает, сколько людей слушает определенный канал, он просто отправляет сообщение. Подписчики должны прослушивать интересующие их каналы.

Практически говоря, канал обычно содержит тип события; поэтому подписчики могут решить, что делать с данными в зависимости от типа события. Иногда это также называют классом сообщений .

Например, обновления запасов могут быть каналом. Издатель (ваш внутренний скрипт) будет выталкивать сообщение на этот канал всякий раз, когда происходит изменение запасов; все и все клиенты, слушающие этот канал, получат это сообщение.

Подробнее о каналах по адресу API guide for channels.

Pusher заботится об управлении каналами и предоставляет инструменты для записи слушателей.

В вашем примере каждый пользователь будет иметь свой собственный поток активности . Последователи (они могут быть пользователями) могут подписаться на прослушивание на канале пользователя, которого они интересуют.

Ваша система просто публикует обновления для всех каналов.

В коде, это будет работать, как это (например, из 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-pusherable просто упрощает создание каналов, украшая ваши взгляды.

Каждое оформленное изображение автоматически будет иметь канал, созданный для объекта, к которому обращаются в представлении. Каждый объект получает свой собственный канал, названный modelclass_pk, поэтому, если ваша модель называется Book, и вы только что создали свою первую книгу, канал будет называться Book_1.

from pusherable.mixins import PusherDetailMixin, PusherUpdateMixin 

class BookDetail(PusherDetailMixin, DetailView): 
    model = Book 

class BookUpdate(PusherUpdateMixin, UpdateView): 
    model = Book 

Это касается бэкэнд (pushing messages).

На переднем конце (клиент, чтение сообщений) есть несколько шаблонных тегов, предоставленных для вас.Эти теги просто импортируют необходимый javascript и помогают подписаться на правильные события.

Для каждой модели есть два события по умолчанию, обновление и просмотр.

Теперь предположим, что вы хотите знать, когда обновляется книга с идентификатором 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> 

В вашем внутреннем интерфейсе, вы могли бы назвать эту точку зрения с конкретной книгой:

def book_update(request): 
    obj = get_object_or_404(Book, pk=1) 
    return render(request, 'update.html', {'obj': obj}) 

Теперь откройте эту точку зрения в новой вкладке браузера.

В другой вкладке браузера или в оболочке django - обновите книгу с идентификатором 1, и вы заметите, что консоль javascript автоматически зарегистрирует ваши изменения.


Как я могу использовать его, если у меня есть 2 классов в моей базе данных, как, скажем, один для вопроса и один для вариантов, после создания одного вопроса он должен появляться в кормах его последователей и по с вариантами, есть ли у меня , чтобы нажать на опции? Как это сделать?

Pusher не заботится о том, чем являются ваши классы баз данных или какие отношения с базой данных. Вы должны это понять сами.

Задача Pusher ограничена тем, что «обновление в реальном времени» происходит в браузере без необходимости обновления страницы.

Плюс как создать отношения, то есть когда пользователь следует другому, как , чтобы подписаться на него и показать связанные каналы?

Я думаю, вы не совсем понимаете, что такое роль Пушера во всем этом.

Pusher не заботится о вашей базе данных и не знает о ваших отношениях в базе данных, какой объект относится к тому, кто и кто следит за кем.

Все, что делает pusher, делает так, чтобы одна страница в браузере автоматически обновлялась без необходимости обновления.

Логика «следовать» за другим пользователем должна быть уже создана в вашем приложении. То есть, у вас должно быть представление, позволяющее пользователю следовать за кем-то другим. Как только они последуют за кем-то, в базе данных будет создана/обновлена ​​запись. Это действие заставит Pusher опубликовать сообщение для этого объекта базы данных. Теперь тот, кто слушает этот канал, получит это сообщение, а затем сможет делать с ним все, что захочет.

Вот порядок событий/развития:

  1. Во-первых, создать приложение в обычном режиме. Он должен иметь все функции, которые вы ожидаете. Если это социальная сеть, люди должны иметь возможность следить за другими и обновлять страницу своего профиля, чтобы видеть какие-либо обновления от своих последователей.

  2. Система должна уже «знать», что такое обновление и какой контент хранится для каждого объекта. Итак, если вы создаете «пользователей» и «последователей», должны быть уже сформированы формы, экраны, логика, таблицы базы данных и т. Д., Чтобы убедиться, что контент может быть добавлен, обновлен, правильными пользователями.

  3. Как только у вас есть все, что на месте правильно и работает, как вам нравится, сейчас вы приносите Pusher; и затем вы определяете, какое «событие» вы хотите автоматически обновить в браузере.

Предположим, что событие «всякий раз, когда пользователь добавляет новый контент на сайт, все его последователи должны быть уведомлены». Поэтому вы должны были бы сделать следующее:

  1. Перейти к представлению, которое выполняется, когда пользователь отправляет новый контент.
  2. Update, что посмотреть, как описано выше, унаследовав от PusherUpdateMixin
  3. Перейти к шаблону, который показан для пользователей, где показаны все их последователи. В этом коде шаблона добавьте теги, описанные выше, чтобы включить javascript api.

  4. Далее в том же шаблоне у вас будет код, в котором перечислены все пользователи, которым этот пользователь следует, в этом логическом коде вы можете добавить div, который будет обновляться «автоматически» всякий раз, когда этот пользователь публикует обновление ,

+0

Как я могу использовать его, если у меня есть 2 класса в моей базе данных, например, вопрос, один для вопроса и один для параметров, после создания одного вопроса он должен появиться в фидах его подписчиков и вместе с параметрами. Должен ли я нажать на опции также? Как это сделать? –

+0

Неважно, сколько у вас моделей, вы бы использовали его таким же образом. –

+0

Можете ли вы, пожалуйста, помочь в этом случае? Спасибо за превосходное объяснение там :) Но вопрос в комментарии сделает его более понятным. –