Cross-Compatibility¶
Channels is being released as both a third-party app for Django 1.8 through 1.10, and being integrated into Django in future. Both of these implementations will be very similar, and code for one will work on the other with minimal changes.
The only difference between the two is the import paths. Mostly, where you
imported from channels for the third-party app, you instead import from
django.channels for the built-in solution.
For example:
from channels import Channel
from channels.auth import channel_session_user
Becomes:
from django.channels import Channel
from django.channels.auth import channel_session_user
There are a few exceptions to this rule, where classes will be moved to other parts of Django in that make more sense:
channels.tests.ChannelTestCaseis found underdjango.test.channels.ChannelTestCasechannels.handleris moved todjango.core.handlers.asgichannels.staticfilesis moved todjango.contrib.staticfiles.consumersThe
runserverandrunworkercommands are indjango.core.management.commands
Writing third-party apps against Channels¶
If you’re writing a third-party app that is designed to work with both the
channels third-party app as well as django.channels, we suggest you use
a try-except pattern for imports, like this:
try:
from django.channels import Channel
except ImportError:
from channels import Channel
All the objects in both versions act the same way, they simply are located on different import paths. There should be no need to change logic.