问题标签 [django-channels]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5192 浏览

javascript - Django Channels Websockets 立即连接和断开连接

首先是一些背景知识,我正在学习本教程: https ://blog.heroku.com/in_deep_with_django_channels_the_future_of_real_time_apps_in_django 在 Windows 64 位上使用 Redis 的 Vagrant 发行版从这里开始: https ://github.com/ServiceStack/redis-windows 使用 Python 3.4 和 Django 1.10

我能够很好地克隆、构建和运行项目。问题是,当我通过浏览器访问 django 视图时,它会很好地加载聊天,但是当我在控制台中发送消息时,它说 websocket 连接然后几乎立即断开连接并且消息不发送。如果我手动将数据输入到数据库中,那么当我第一次加载视图时会显示消息,但由于某种原因,javascript 应用程序无法保持 websocket 打开以发送消息以进行广播。下面是相关代码:

消费者.py

聊天.js

视图.py

模型.py

我一直在玩 javascript 看看是否可以让 websockets 保持打开状态,我也尝试过 Simple Websocket Client https://chrome.google.com/webstore/detail/simple-websocket-client/pfdhoblngboilpfeibdedpjgfnlcodoo?hl =zh

这和那些让我相信这与 python 代码有关的事情是一样的吗?

编辑 1:这是 javascript 应用程序 http://imgur.com/AyIGB0z的开发者控制台

这是运行 daphne http://imgur.com/p2yyZiJ后的控制台输出

0 投票
1 回答
747 浏览

python - 如何从命令向通道发送消息

如何从自定义 manage.py 命令向 Django 消费者发送消息

这是我的消费者

但是,当我尝试运行该命令时,我收到此消息

2017-03-08 03:45:33,839 - 错误 - 工人 - 在测试中找不到匹配的消息!检查你的路由。

如果它是相关的,这是我的路由

0 投票
0 回答
1139 浏览

javascript - Django 频道中的聊天室

我有模型“项目”和“房间”。每个项目都有自己的聊天室。我正在尝试使用 Django 频道。不幸的是,我有错误。我想念什么以及如何解决此错误。

错误

urls.py

设置.py

模型.py

视图.py

消费者.py

路由.py

聊天.js

0 投票
2 回答
2294 浏览

python - Django 频道中的消费者

我正在尝试在 Django 中创建聊天室。我使用 Redis 服务器和 Django 频道。我也有模型 Project 和 Room。每个项目都有自己的聊天室。当我尝试通过下面的这个 url 打开聊天室页面时出现错误。在我看来,我的 consumer.py 文件不正确。如何修复此错误。需要帮忙!

网址

错误

模型.py

视图.py

消费者.py

0 投票
0 回答
799 浏览

javascript - Django 中的群聊

我正在尝试使用 Channels 在 Django 中创建群聊。在下面你可以看到我的代码。提交消息后没有任何反应。也登录为空。如何让代码工作?

路由.py

消费者.py

模板

0 投票
3 回答
3923 浏览

python - 需要登录 Django Channels 套接字?

我正在尝试 Django 1.10 中的 Channels 并设置了一些消费者。

我尝试为它创建一个 login_required 装饰器,在执行它之前关闭连接,以防止客人进入这个私有套接字。之后还集成了单元测试来对其进行测试,但它们一直失败,因为它一直让客人进来(到处都是匿名用户错误)。

此外,有时登录和注销会话时不会清除,它会让旧用户进入。

装饰师:

这是消费者代码:

奇怪的是,当注释掉 client.send(signal.message)) 转发之间的所有逻辑时,它工作得很好并且单元测试通过(意味着客人被阻止并且身份验证代码不运行 [因此 AnonymousUser 错误])。有任何想法吗?

这里也是测试:

我是否接近这个错误,如果我是,我该如何正确地做到这一点(需要身份验证)?

编辑:集成了一个动作系统来尝试一些东西,看起来 Django 频道根本没有从 HTTP 中获取任何会话。

只是返回假。

EDIT2:我看到它现在可以工作了,我尝试将 localhost 更改为 127.0.0.1 并证明它现在可以工作。有没有办法让它将 localhost 检测为有效域,以便通过会话进行端口?

EDIT3:原来我发现了 localhost vs 127.0.0.1 cookie 问题哈哈。为了不浪费赏金,您将如何亲自在消息/频道中实现 auth login_required?

edit4:虽然我仍然不知道为什么这件事不起作用,但这是我最终围绕这个问题改变我的应用程序的方式:

我创建了一个动作系统。进入时,套接字不会执行任何操作,直到您通过 JSON 向其发送 AUTHENTICATE 操作。我在 guest_actions 和 user_actions 中分离了登录操作。一旦通过身份验证,它就会设置会话并且您可以使用 user_actions。

0 投票
1 回答
768 浏览

python - Django Channels doesn't run basic test case

I'm trying to test my consumers with the testing framework from django channels, but even a basic test doesn't seem to work

This is what my test case looks like:

This is my routing:

This is my consumer:

This gives me the following error:

ERROR: test_ros_channel (robot_configuration_interface.tests.unit.test_channels.ROSChannelTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/cjds/development/robot_configuration_interface/robot_configuration_interface/tests/unit/test_channels.py", line 36, in test_ros_channel client.send_and_consume('websocket.connect', '/new/') File "/usr/local/lib/python2.7/dist-packages/channels/test/http.py", line 94, in send_and_consume self.send(channel, content, text, path) File "/usr/local/lib/python2.7/dist-packages/channels/test/http.py", line 79, in send content.setdefault('reply_channel', self.reply_channel) AttributeError: 'str' object has no attribute 'setdefault'

I'm trying to follow this tutorial here:

http://channels.readthedocs.io/en/stable/testing.html#clients

0 投票
2 回答
3922 浏览

python - Django 'AsgiRequest' 对象没有属性 'content_type'

我正在开发一个名为 app 的 django 应用程序,它是 django 项目的一部分,但是在尝试登录管理员时遇到了一些问题。

当我尝试登录由 localhost:8000/admin/login/ 在 shell 中创建的超级用户时发生错误,它显示错误:

然后显示回溯

这是我的 requirements.txt:

有没有解决问题的好方法?最稀有的是,直到昨天它才能正常工作,而今天我没有进行任何更改并且它不起作用

0 投票
2 回答
1815 浏览

django - Django 通道的 uWSGI 等效项

我知道 Django 是请求/响应周期,而 Django Channels 是不同的,我的问题与此无关。

我们知道 uWSGI/gunicorn 创建工作进程并且可以配置在线程中执行每个请求。这样它就可以在具有 10 个线程的单个 uWSGI 工作进程中“同时”(非并行)服务 10 个请求。

现在让我们假设每个 Web 客户端都想使用 Django Channels 创建一个 websocket,根据我有限的理解(使用 vanilla 实现),它将在单个线程中处理每条消息,这意味着,要同时处理 x 数量的连接,你需要x 通道工作进程的数量。我知道有人会建议增加进程的数量,我不是来讨论这个的。

我的问题很简单,是否有任何现有的库可以与 uWSGI/gunicorn 执行类似的工作,在线程中执行消费者函数?

0 投票
0 回答
84 浏览

django-channels - 仅绑定到 WebsocketBinding 中的某些操作

我正在使用 Django Channels 开发一个应用程序,其中我有一个模型,其更改通过 WebSocket 通道使用WebSocketBinding. 在这种特殊情况下,只有createdelete消息是相关的,因此,我认为最好update从不发送消息,而不是在设置的前端部分完全忽略它们。我已经尝试覆盖Binding通道基类(post_save_receiverpre_save_receiver)中的不同处理程序,以及扩展该类WebsocketBinding但无济于事。我的问题是:有没有一种简单的方法可以实现这一目标?在文档中我找不到任何指针。如果没有,完成它的最简单方法是什么?

提前致谢!