ASGI_APPLICATION在Django Channels中无法正常工作

17

我按照渠道文档中的教程执行操作,但是当我启动服务器 python3 manage.py runserver 时,它会给我这个错误信息:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
October 17, 2022 - 00:13:21
Django version 4.1.2, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

当我期望它给我这个时:
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
October 17, 2022 - 00:13:21
Django version 4.1.2, using settings 'config.settings'
Starting ASGI/Channels version 3.0.5 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

settings.py

INSTALLED_APPS = [
    'channels',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    ...
]

ASGI_APPLICATION = 'config.asgi.application'

asgi.py

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

application = ProtocolTypeRouter({
    'http': get_asgi_application(),
})

即使我把 ASGI_APPLICATION = 'config.asgi.application' 改为 ASGI_APPLICATION = '',也不会提示任何错误。
6个回答

28

可能是因为您使用的Django和Channels版本不兼容。

建议使用以下版本:channels==3.0.4 and django==4.0.0


2
谢谢,已经在Python 3.9上运行成功。 - Shashi Shekhar
对我来说,上述版本不起作用。 - Amol_G
根据文档,我在已安装应用程序列表的顶部添加了Daphne。之后运行runserver命令即可启动ASGI / Daphne服务器。这样做可以吗? - Ritankar Bhattacharjee
我不认为为了支持ASGI而降级渠道或Django是一个好主意,因此我选择了@reza_khalafi的答案,而不是降级Django。 - devmike01
1
4.0.0完全不起作用,但如果你使用3.0.4,它就像魔法一样好用! - Berk Efe Keskin
显示剩余3条评论

11

首先:

pip install daphne
pip install channels

接下来更新setting.py文件:

INSTALLED_APPS = [
    'daphne',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

仅此而已。


10

我遇到了和你一样的问题,django=4.1.4,channels=4.0.0。

我的解决办法如下:

  1. 使用daphne安装channels(我没有删除或对以前安装的channels做任何事情;在同一个虚拟环境下操作)

python -m pip install -U channels["daphne"]

  1. 将daphne放入INSTALLED_APPS中,不要把channels放在那里:

INSTALLED_APPS = ( "daphne", "django.contrib.auth",...

  1. 在settings.py中添加ASGI_APPLICATION:

ASGI_APPLICATION = "myproject.asgi.application"


1
Daphne不匹配 - reza_khalafi
运行 'python -m pip install -U channels["daphne"]' 命令后出现错误 'no matches found: channels[daphne]'。 - Gulshan Prajapati
@GulshanPrajapati 或许你正在使用一个解释括号不同的控制台。请使用 channels\["daphne"\] 代替。 - undefined

4

来自Channels 4.0.0发布说明文档:

为了让其他ASGI服务器的用户在没有Daphne和Twisted的开销的情况下使用Channels,Daphne应用服务器现在是可选依赖项,可以直接安装或使用daphne extra进行安装,如上面的pip示例所示。 在使用Daphne时,需要daphne>=4.0.0。channels[daphne] extra可以保证这一点。

runserver命令已移至daphne包中。

为了使用runserver命令,请将daphne添加到您的INSTALLED_APPS中,在django.contrib.staticfiles之前:

INSTALLED_APPS = [ "daphne", ... ]

正如您所看到的,runserver命令已移至daphne包中。因此,您必须按照此处提到的方式安装并包含它。


0
使用支持频道的Python版本,在pypi频道页面可以找到它。

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0

我曾经遇到过同样的问题,后来发现Channels有新版本发布了。由于项目的Pipfile没有指定版本,所以它被自动升级了。

也许你遇到了同样的问题,因为你的问题是在Channels v4.0发布两天后提出的。

降级到v3.0.5可以解决问题,直到我能够正常升级为止。


降级到V3.0.5对我来说也是最简单的解决方案。 - P. Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接