admin管理员组文章数量:1566355
以下解决办法所处于的软件版本有:
Python3+
Django2+
Channel3+
问题场景:
在 Channels 3.0.0 版中,当我尝试通过 websocket 连接到我的 Django Application 时,python 引发异常。来自运行服务器的控制台日志:
November 01, 2021 - 13:18:04
Django version 3.1.2, using settings 'Menu.settings'
Starting ASGI/Channels version 3.0.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
WebSocket HANDSHAKING /ws/dist [127.0.0.1:56024]
Exception inside application: object.__init__() takes exactly one argument (the instance to initialize)
Traceback (most recent call last):
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/channels/routing.py", line 71, in __call__
return await application(scope, receive, send)
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/channels/sessions.py", line 47, in __call__
return await self.inner(dict(scope, cookies=cookies), receive, send)
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/channels/sessions.py", line 172, in __call__
return await self.inner(self.scope, receive, self.send)
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/channels/auth.py", line 181, in __call__
return await super().__call__(scope, receive, send)
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/channels/middleware.py", line 26, in __call__
return await self.inner(scope, receive, send)
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/channels/routing.py", line 150, in __call__
return await application(
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/asgiref/compatibility.py", line 33, in new_application
instance = application(scope)
File "/home/nakmak98/source/Menu/pycharm_venv/lib/python3.8/site-packages/channels/generic/websocket.py", line 23, in __init__
super().__init__(*args, **kwargs)
我的routing.py的代码
from django.urls import path
from . import consumers
websocket_urlpatterns = [
path('ws/dist', consumers.MealPointConsumer),
]
问题原因:
这个问题主要是在使用Python的channel3版本的时候,routing.py有了重大的更新。
v3 是对 ASGI v3 的一次重大更新,它改变了consumer的sign。
解决办法:
在routing.py中的path调用的时候,加上.as_asgi()即可,比如
from django.urls import path
from . import consumers
websocket_urlpatterns = [
path('ws/dist', consumers.MealPointConsumer.as_asgi()),####.as_asgi()加上这个
]
有关更新的更多详细信息和指南,请参阅 3.0 发行说明:https://channels.readthedocs.io/en/stable/releases/3.0.0.html#update-to-asgi-3
本文标签: 提示applicationExceptionobjectargument
版权声明:本文标题:Python3提示Exception inside application: object.__init__() takes exactly one argument (the instance to 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726220556a1061058.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论