Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sademidenko/f7087a62118f6f3d3a5f2ee141dbc07f to your computer and use it in GitHub Desktop.
Save sademidenko/f7087a62118f6f3d3a5f2ee141dbc07f to your computer and use it in GitHub Desktop.
Lecture7
Я поднимаю глаза,я тоскую по родственным душам, мне здесь так тесно
@sademidenko
Copy link
Author

sademidenko commented May 6, 2017

Для реализации push уведомлений будем использовать Channels. В будущем, эта библиотека библиотека будет включена в ядро с версии 2.0.

Установка зависимости

# apt install redis-tools
(tp-env) $ pip install channels
(tp-env) $ pip install asgi_redis

Нас интересует тег 7.1

git show hw_7.1

Теперь при нахождении на странице вопросов, Вам будут приходить уведомления о новых вопросах.

Для работы приложения необходимо добавить свой роутинг для ассинхронного взаимодействия. Будем обрабатывать:

  • /questions/events/

На подключение и отключение websocket

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

Самое интересное в коде это вызов Group. При подключении мы подписали клиента на событие

Group(Question.group_name).add(message.reply_channel) 

И теперь вызывая

    Group(Question.group_name).send({
        'text': json.dumps({
            'title': instance.title,
            'author': instance.author.username
        })
    })

Мы отправим сообщения всем людям которые подписались на Question.group_name.

Как происходит подписка на события? Очень просто, мы вызываем функции из JS либки которая идёт в коробке :)

Остальной код, это импорт библиотек и минимальные настройки для работы, они не очень интересны.

Для красивого отображения сообщений через WS можно использовать:

Полезные ссылки:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment