【问题标题】:Django Channels/Daphne Internal Server Error "'dict' object is not callable"Django Channels/Daphne 内部服务器错误“'dict' 对象不可调用”
【发布时间】:2018-09-03 23:29:45
【问题描述】:

我在连接到我的网站时收到此错误,因为它正在运行频道。

2018-03-25 20:59:19,049 - ERROR - http_protocol - Traceback (most recent call last):
  File "/home/.virtualenvs/blog/lib/python3.5/site-packages/daphne/http_protocol.py", line 158, in process
"server": self.server_addr,
  File "/home/.virtualenvs/blog/lib/python3.5/site-packages/daphne/server.py", line 184, in create_application
application_instance = self.application(scope=scope)
  File "/home/.virtualenvs/blog/lib/python3.5/site-packages/channels/staticfiles.py", line 42, in __call__
return self.application(scope)
TypeError: 'dict' object is not callable

我不知道从哪里开始解码错误。频道服务器设法以此开始

Starting ASGI/Channels development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
2018-03-25 20:57:45,400 - INFO - server - HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2018-03-25 20:57:45,400 - INFO - server - Configuring endpoint 
tcp:port=8000:interface=0.0.0.0
2018-03-25 20:57:45,401 - INFO - server - Listening on TCP address 0.0.0.0:8000

【问题讨论】:

  • 我们能看到你的routing.py文件吗,在channels installation guide?中指定
  • 你解决了这个问题@Yalnix 吗?
  • 是的,我最终做到了。我不太记得是怎么做到的,但确实涉及对项目的彻底改造。

标签: django channels daphne


【解决方案1】:

不确定它是否仍然相关,但为了让其他人看到,我今天想通了。

在升级 Django 时配置新环境时,我使用

创建了一个 asgi.py 文件
 application = 'whatever.module.application' 

在我的情况下,错误消息是“str”对象不可调用。

所以我做了一些思考(因为找不到对这个问题的直接答案,我几乎在堆栈上发布了;))并认为应用程序变量需要是实际的路由器实例。

在我的情况下,我使用协议路由器,因为我需要 websocket 和普通 HTTP。查看前面的代码,http_protocol.py 在内部处理它(“# BORING old HTTP”是其中的一条注释。哈哈。)

application = ProtocolTypeRouter({
    "websocket": urls.urlpatterns
}) 

然后 urls.urlpatterns 可能包含如下内容:

urlpatterns = [
  url(r'^', include('cars.urls', namespace='cars')),
  url(r'^help/', include('help.urls', namespace='help'))
]

我猜你的问题是直接使用上面 urlpatterns 中类似的东西

...
application = []
...

相信可以帮助遇到同样问题的人。

【讨论】:

  • 你的意思是,我们必须直接使用 url 模式?就像没有 AuthMiddlewareStack 的应用程序
  • 就我而言,它就是这样工作的。我并不是说不可能包含身份验证中间件@SanjeevSiva,您是否有一个确切的问题需要我看看?
【解决方案2】:

我遇到了类似的问题,导致 daphne 服务器在开发中崩溃。

File "C:\Users\sjsui\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers[base.py](base.py)", line 39, 
in load_middleware mw_instance = middleware(handler) 
TypeError: 'module' object is not callable

我意识到在从 pip 安装频道包的过程中,我不小心在settings.MIDDLEWARE 中添加了一个错误的中间件:

删除这行 django.middleware 后,我能够再次启动开发服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2023-03-25
    • 2011-03-18
    • 1970-01-01
    • 2021-04-12
    • 2019-07-29
    • 2019-09-08
    相关资源
    最近更新 更多