使用Django Channels开发聊天Web遇TypeError问题求助
Django Channels异步消费者报错解决
错误原因
出现TypeError: object PublicChatConsumer can't be used in 'await' expression的核心原因是路由配置错误:你直接将PublicChatConsumer类传入了路由,而非通过as_asgi()方法生成可调用的ASGI应用实例。
因为你使用的是AsyncJsonWebsocketConsumer异步消费者,Channels要求异步消费者必须通过as_asgi()包装,才能生成支持await调用的ASGI应用对象。
解决方法
修改你的Channels路由文件(通常为routing.py),确保消费者通过as_asgi()方法注册:
from django.urls import re_path from .consumers import PublicChatConsumer websocket_urlpatterns = [ re_path(r'^public_chat/(?P<room_id>\d+)/$', PublicChatConsumer.as_asgi()), ]
重点是给PublicChatConsumer加上.as_asgi()调用,这会将消费者类转换为符合ASGI规范的可异步调用的应用实例。
验证说明
你的PublicChatConsumer代码本身没有问题,继承AsyncJsonWebsocketConsumer并实现异步方法的写法是正确的,无需修改消费者内部逻辑。
内容的提问来源于stack exchange,提问作者ravi dochania
相关产品推荐
相关产品推荐

