使用没有视图的 Django 频道
Posted
技术标签:
【中文标题】使用没有视图的 Django 频道【英文标题】:Use Django Channels without views 【发布时间】:2020-11-12 21:20:38 【问题描述】:我们想使用 Django Channels 来使用 Keras 和 Tensorflow 作为模型。我们已经尝试过 Flask,但它不能用于生产。然后我们尝试了Javas DeepLearning4J,但也遇到了很多问题。我们想用 Python 解决它。
问题是 Django 是全栈的,我们只需要使用 websockets 并执行我们的 python 代码并将结果发送回来。
Google 上没有关于如何做到这一点的示例。我们这样做是因为我们有一个 Angular 前端、Spring Boot 后端和另一个 Spring Boot 应用程序作为所有服务之间的连接器。我们不需要 Django 的大部分功能。
很难找出做什么。我认为没有@socket.route
或类似的东西。
Websocket using Django Channels这个问题可能有点帮助,但已经 3 岁了,可能已经过时了。实现我们需要的方法是什么?
【问题讨论】:
真的吗?!? channels documentation 中详细说明了如何使用 websockets。你到底错过了什么? 【参考方案1】:如果我正确理解了您的问题,您想使用 Django Channels 而不在生产中使用任何 Django?
这不是问题,但您仍然必须在您的 virtualenv 中安装 Django。我假设,您知道如何配置应用程序的 Channels 部分,我将仅描述您如何使其工作。
-
您仍然需要使用 django 启动项目:
django-admin startproject
可以解决问题
现在您有一个工作的“核心”项目,您还需要设置您的频道routing
。我在核心项目文件夹中使用了routing.py
(在settings.py
旁边)。您还需要您的消费者,通常在同一位置的 consumers.py
。
然后,您需要在settings.py
中设置您的频道部分。例如:
# Channels
ASGI_APPLICATION = 'myproject.routing.application'
CHANNEL_LAYERS =
'default':
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG':
"hosts": [('127.0.0.1', 6379)],
,
,
那么您需要编辑 INSTALLED APPS SECTION:
INSTALLED_APPS = [
#if you dont want any of "standard" django just comment it out
#'django.contrib.admin',
#'django.contrib.auth',
#'django.contrib.contenttypes',
#'django.contrib.sessions',
#'django.contrib.messages',
#'django.contrib.staticfiles',
'channels', # <--- here you enable the channels part
]
-
你准备好了!我不知道您使用的是什么 ASGI 服务器,但您将其指向您的 routing.py 文件中的应用程序对象。例如:
from channels.routing import ProtocolTypeRouter,URLRouter,ChannelNameRouter
from django.urls import path
from . import consumers # your actual consumers for the endpoint of routes
application = ProtocolTypeRouter(
# Empty for now (http->django views is added by default)
"websocket": URLRouter(
[
path('ws/route1/', consumers.ConsumerA),
path('ws/route2/', consumers.ConsumerB),
# and so on...
]
),
"channel": ChannelNameRouter(
"channel_name": consumers.ChannelConsumer,
# and other channels you may have...
)
)
基本上就是这样。所以一个 TLDR,你仍然需要运行 django,但是你可以在设置中去除除通道之外的所有内容......
【讨论】:
好吧,对不起,我对 Django 和 Python 完全陌生。我必须清除 urlpatterns = [] 现在我不知道如何在没有 urlPattern 的情况下连接到频道。使用 localhost:6379/ws/route1 ?或如何 @CptDayDreamer 你为什么不做我链接的教程。它具有所需的 javascript 部分,设置了在此答案中复制的所有这些配置,但随后以可用的方式并解释了沿途的内容,因此您实际上可以理解移动部分。是的,它将使用视图,但仅用于呈现为聊天室页面提供服务的 html。 @Melvyn 你不认为我已经这样做了吗?我做了,但我不明白,只是无法让它运行。否则我不会问 然后可能会询问有关该教程的具体问题。究竟是什么不起作用,因为它对我来说是完全透明的,并且在 5 分钟内启动并运行了房间。但是,如果您对 python 一无所知,那么您正在尝试跑步,然后才能走路并且应该采取a step back。 您好,很抱歉回复晚了,我又看了一遍您的问题,在我看来,您实际上不需要使用频道。通道扩展点是 (a) 使您能够在 django 中处理 websocket 和 (b) 启用 通道层 以便在所有连接的 websocket 客户端与服务器之间进行更轻松的通信。如果你不需要这个功能(这真的很好)并且只想运行一些你的python代码并返回它,你可以考虑使用Tornado server
:tornadoweb.org/en/stable以上是关于使用没有视图的 Django 频道的主要内容,如果未能解决你的问题,请参考以下文章
在 systemd 上使用 daphne 运行 django 频道