2.1.0 Примечания к выпуску

Channels 2.1 привнес несколько новых крупных изменений в Channels, а также несколько мелких исправлений. Кроме того, если вы еще не видели, теперь у нас есть длинная форма tutorial, чтобы лучше представить некоторые концепции и стили кодирования sync и async.

Основные изменения

Асинхронный HTTP-потребитель

Появился новый класс потребителя HTTP с поддержкой асинхронного исполнения, channels.generic.http.AsyncHttpConsumer. Это позволяет значительно упростить написание конечных точек long-poll или других долгоживущих HTTP соединений, которые выигрывают от поддержки native async.

Подробнее об этом можно прочитать в документации Потребители.

Потребители WebSocket

Все эти потребительские классы теперь имеют встроенную функциональность присоединения и оставления групп, которая заставит потребителя присоединиться ко всем именам групп, которые находятся в итерабле groups на потребительском классе (это может быть статический список или метод @property).

Кроме того, методы accept в обоих вариантах теперь принимают необязательный аргумент subprotocol, который будет отправлен обратно клиенту WebSocket как субпротокол, выбранный сервером. Объявленные клиентом подпротоколы, как всегда, можно найти в области видимости как scope["subprotocols"].

Вложенная маршрутизация URL

Экземпляры URLRouter теперь могут быть вложены друг в друга и, подобно обработке URL в Django и include, будут отсекать совпадающую часть URL во внешнем маршрутизаторе и оставлять только не совпадающую часть для внутреннего маршрутизатора, что позволяет использовать файлы маршрутизации повторно.

Обратите внимание, что вы не можете использовать функцию Django include внутри URLRouter, так как она слишком много предполагает о том, что ей дано в качестве левой части, и неправильно завершит ваше регулярное выражение/шаблон URL.

Вход в систему и выход из системы

Помимо перестройки внутренних компонентов AuthMiddleware, теперь есть асинхронные функции login и << 2 >>>, которые можно вызывать в потребителях для входа и выхода пользователей из текущей сессии.

В связи с тем, что куки отправляются обратно клиентам, они имеют некоторые оговорки; подробнее о них и о том, как правильно их использовать, читайте в Аутентификация.

Канальный уровень в памяти

Канальный уровень in-memory был расширен до полного истечения срока действия и поддержки групп, так что теперь он должен быть пригоден для замены в большинстве тестовых сценариев.

Тестирование

ChannelsLiveServerTestCase был переписан для использования нового метода запуска Daphne, который должен быть более устойчивым (и более быстрым), и теперь разделяет код с самим тестовым набором Daphne.

Порты теперь определяются операционной системой, а не выбираются из заданного диапазона. Также теперь поддерживаются статические файлы, если включено приложение Django staticfiles.

Кроме того, в классах Communicator появился метод receive_nothing, который позволяет вам утверждать, что приложение ничего не отправило, вместо того, чтобы писать это самостоятельно, используя обработку исключений. Более подробную информацию можно найти в документации Тестирование.

Валидация заголовка происхождения

Помимо удаления утверждений print, которые случайно попали в последний релиз, это утверждение было переработано для более корректного сопоставления с заголовками согласно спецификации заголовков Origin и согласования с установкой ALLOWED_HOSTS в Django.

Теперь он также может применять протокол (http против https) и порт, оба опционально.

Исправления и небольшие изменения

  • Утверждения print, которые случайно остались в коде валидации Origin, были удалены.

  • Команда runserver теперь показывает версию запущенного вами Channels.

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

  • WebsocketCommunicator теперь принимает строку запроса, переданную в конструктор, и добавляет ее в область видимости, а не просто игнорирует.

  • Обработчики тестов будут корректно обрабатывать изменение настройки CHANNEL_LAYERS через декораторы и стирать внутренний кэш канального слоя.

  • SessionMiddleware может быть безопасно вложена внутрь себя, а не вызывать ошибку времени выполнения.

Обратные несовместимые изменения

  • Формат, принимаемый OriginValidator для своих доменов, изменился, и *.example.com больше не допускается; вместо этого используйте .example.com для соответствия домена и всех его поддоменов.

  • Если раньше вы вставляли экземпляры URLRouter друг в друга, то раньше оба экземпляра совпадали по полному URL, а теперь они будут совпадать по несопоставленной части URL, что означает, что ваши URL-маршруты будут нарушены, если вы планировали такое использование.

Вернуться на верх