2.1.2 Release Notes

Channels 2.1.2 is another bugfix release in the 2.1 series.

Special thanks to people at the DjangoCon Europe sprints who helped out with several of these fixes.

Major Changes

Session and authentication middleware has been overhauled to be non-blocking. Previously, these middlewares potentially did database or session store access in the synchronous ASGI constructor, meaning they would block the entire event loop while doing so.

Instead, they have now been modified to add LazyObjects into the scope in the places where the session or user will be, and then when the processing goes through their asynchronous portion, those stores are accessed in a non-blocking fashion.

This should be an un-noticeable change for end users, but if you see weird behaviour or an unresolved LazyObject, let us know.

Bugfixes & Small Changes

  • AsyncHttpConsumer now has a disconnect() method you can override if you want to perform actions (such as leaving groups) when a long-running HTTP request disconnects.
  • URL routing context now includes default arguments from the URLconf in the context’s url_route key, alongside captured arguments/groups from the URL pattern.
  • The FORCE_SCRIPT_NAME setting is now respected in ASGI mode, and lets you override where Django thinks the root URL of your application is mounted.
  • ALLOWED_HOSTS is now set correctly during LiveServerTests, meaning you will no longer get 400 Bad Request errors during these test runs.

Backwards Incompatible Changes

None.