我刚刚开始学习 django 中的通道和 asgi .... 在我看到的一些教程中,他们这样做是为了配置 asgi 应用程序
asgi.py
import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mywebsite.settings')
application = ProtocolTypeRouter({
'http':get_asgi_application(),
})
设置.py
INSTALLED_APPS = [
'channels',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'chat'
]
ASGI_APPLICATION = 'mywebsite.asgi.application'
检查当我运行我的服务器时,它应该像这样在 asgi/channel 服务器上运行
Starting ASGI/Channels version development server at http://127.0.0.1:8000/
但我的仍在默认运行
Starting development server at http://127.0.0.1:8000/
当我使用 daphne 并放入已安装的应用程序而不是频道时
'daphne',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'chat'
]
效果很好
Starting ASGI/Daphne version 4.0.0 development server at http://127.0.0.1:8000/
有人可以告诉我这是怎么回事吗?以及 django 与 asgi 到底是如何工作的?
您正在观看的教程使用的是 3.0.4 django 通道。我也遇到过同样的问题。在 3.0.4 中你必须使用通道,而在 django 4.0.0 中它被更改为 daphne。
官方文档建议将 Daphne 添加到已安装应用列表的顶部,以确保其优先于其他已安装应用,并用作处理基于 Channels 的请求的服务器。
pip install -U "channels[daphne]"
Daphne 是 Django Channels 用于接受 WebSocket 连接的 ASGI 服务器。因此,如果您想使用 Django Channels,则必须安装 daphne 并将其添加到已安装的应用程序中。另一方面,已安装的应用程序中不需要 Channels,因为它们本身不是 django 应用程序,而是用于创建应用程序的框架。因此,您必须使用基于 Channels 框架构建的其他应用程序才能使用它。