在 Django 中将参数传递给 websocket
Posted
技术标签:
【中文标题】在 Django 中将参数传递给 websocket【英文标题】:Pass arguments to websocket in Django 【发布时间】:2021-07-16 18:18:32 【问题描述】:使用 websockets 时,如何将参数从浏览器传递到服务器端? 当浏览器发出 WS 请求时,我想从服务器返回 Hello。应从客户端传递。
javascript 在浏览器中运行。
var socket = new WebSocket('ws://<IP>:80/ws/hello/');
socket.onmessage = function(event)
var data = JSON.parse(event.data);
console.log(data);
routing.py
from django.urls import path
from .consumers import *
ws_urlpatterns = [
path('ws/hello/', Hello.as_asgi())
]
消费者.py
from channels.generic.websocket import WebsocketConsumer
class Hello(WebsocketConsumer):
def connect(self):
self.accept()
self.send(json.dumps('message':"Hello, <NAME>!"))
如何将 NAME 替换为客户的姓名?
我可以在 JavaScript 代码中使用
var socket = new WebSocket('ws://<IP>:80/ws/hello/?<NAME>');
当我这样做时,如何将名称传递给 consumer.py 中的 Hello 类,我应该在 routing.py 中添加一些特殊的东西吗?
【问题讨论】:
【参考方案1】:要将数据发送到 websocket 服务器,您想使用socket.send('string to send')
见:https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications#sending_data_to_the_server
无需编辑 websocket 连接 URI。
要更改 NAME,只需将字符串的那部分设置为 python 变量,然后将该变量的值更改为您想要的任何值。
【讨论】:
以上是关于在 Django 中将参数传递给 websocket的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django urls.py 中将 url 参数传递给 reverse_lazy
在 Eclipse(Pydev) 中将命令行参数传递给 Python 脚本