一、起因
想用websocket实现视频流传输 --> 开始配置channels环境 --> 报错
(其实报了很多错)大多在说Cannot import ** model,还以为是路径没写对,一直改呀改...
然后发现主要原因在下方
Cannot import ASGI_APPLICATION module 'myproject.asgi'
二、解决方法
试了很多种方法,确定的是最后一步是必要条件,那么开始上菜!
1.找到你当前虚拟环境所在位置,例如
2.修改虚拟环境中的asgi.py(某博主方法,结论是没用)
3.修改settings.py ,daphne必须在第一行,(官网说的,不然有冲突)
python -m pip install -U channels["daphne"]
添加ASGI_APPLICATION配置
中途经历了多种版本降级升级,都没用,直到胃不舒服,一边打嗝,一边继续改,光明出现
4.升级django和channels版本都为最新版
pip install --upgrade django channels
然后run项目,终于正常启动asgi,如下图
为什么说第三步没用呢,你可以打开那个虚拟环境asgi文件,又变回修改前的样子,因为你django升级了,文件都是新版本的内容
PS:所谓下载命令 pip install -U channels==3.0.2 假
最后还得是新版本配新版本
5.续(第二天早上起来,asgi.py加上channels又不行了)
settings.py 删除daphne
asgi.py
import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day16.settings')
# django_asgi_app = get_asgi_application()
# application = ProtocolTypeRouter({
# "http": django_asgi_app,
# # Just HTTP for now. (We can add other protocols later.)
# })
from . import routings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'qq_chart.settings')
# application = get_asgi_application()
application = ProtocolTypeRouter({
'http': get_asgi_application(),
'websocket': URLRouter(routings.websocket_urlpatterns)
})
routings.py
from django.urls import re_path
from day16.app01 import consumers
websocket_urlpatterns = [
re_path(r'ws/(?P<group>\w+)/$', consumers.ChatConsumer.as_asgi())
]
project目录