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