channels2.X 学习笔记

- No module named 'asgiref.sync' 报错解决:

# 报错原因:
"""
django版本过低, 卸载最新版本的 channels 使用2.x 版本的
"""
pip3 uninstall channels

- 安装:

"""
Django 1.11.15 版本不支持最新的 channels
"""

pip3 install channels==2.1.4

- 在django中的配置:

  - 配置settings.py文件:

# 添加APP
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'channels',
    "app01.apps.App01Config",
]

# 其他配置文件 ...

# ASGI 的路由设置
ASGI_APPLICATION = 'ChannelDemo.routing.application'
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgiref.inmemory.ChannelLayer",
        "ROUTING": "ChannelDemo.routing.channel_routing",
    },
}

  - channels的路由配置:

# 在项目settings文件同级目录中新增routing.py
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import app01.routing

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            app01.routing.websocket_urlpatterns  # 指明路由文件是app01.routing.py
        )
    ),
})

  - app01中的routing.py 文件:

from django.conf.urls import url

from . import consumers

websocket_urlpatterns = [
    url(r'^ws/deploy/(?P<service_name>[^/]+)/$', consumers.DeployResult),
    url(r'^ws/$', consumers.ws),
]

   - 视图文件 consumers.py :

  待续。。。

原文地址:https://www.cnblogs.com/Fushengliangnian/p/10200777.html