我将基于类的函数用于Django通道,当我尝试获取与websocket_connect连接的客户端的Reply_channel时,会收到此错误。
我对频道比较陌生
Consumer.py
import asyncio
import json
from django.contrib.auth import get_user_model
from channels.consumer import AsyncConsumer
from channels.db import database_sync_to_async
from .models import Thread, ChatMessage
class ProgramConsumer(AsyncConsumer):
async def websocket_connect(self, message):
print("connected", message)
#What does this do??? Is it accepting the connection that is sent from the client html page
await self.send({
"type": "websocket.accept"
}) #Execute that code and wait
await self.reply_channel.send({
"text": json.dumps({
"action": "reply_channel",
"reply_channel": message.reply_channel.name,
})
}
)
我正在尝试复制下面的代码,但是要使用基于类的函数。
@channel_session
def ws_connect(message):
message.reply_channel.send({
"text": json.dumps({
"action": "reply_channel",
"reply_channel": message.reply_channel.name,
})
})
下面是我的HTML页面上的JQuery
JQuery
$(function() {
console.log(window.location)
var loc = window.location
//var formData = $("#form") //Grabs the form element above
//var msgInput = $("#id_message")
//var chatHolder = $("#chat-items")
//var me = $("#myUsername").val()
var wsStart = 'ws://'
if (loc.protocol == 'https:'){
wsStart = 'wss://'
}
// Define endpoint
var endpoint = wsStart + loc.host + loc.pathname
// methods that come in the socket
console.log("Connecting to " + endpoint)
// Use endpoint
var socket = new WebSocket(endpoint)
// RECIEVING
socket.onmessage = function(message) {
console.log("Got message: " + message.data);
var data = JSON.parse(message.data);
// if action is started, add new item to table
if (data.action == "started") {
var task_status = $("#task_status");
var ele = $('<tr></tr>');
ele.attr("id", data.program_id);
var item_id = $("<td></td>").text(data.program_id);
ele.append(item_id);
var item_name = $("<td></td>").text(data.program_name);
ele.append(item_name);
var item_status = $("<td></td>");
item_status.attr("id", "item-status-"+data.program_id);
var span = $('<span class="label label-primary"></span>').text(data.program_status);
item_status.append(span);
ele.append(item_status);
task_status.append(ele);
}
// if action is completed, just update the status
else if (data.action == "completed"){
var item = $('#item-status-' + data.program_id + ' span');
item.attr("class", "label label-success");
item.text(data.program_status);
}
};
// SENDING
// Takes form data and stringifys it inso JSON action and program_name
$("#taskform").on("submit", function(event) {
var message = {
action: "start_sec3",
program_name: $('#task_name').val()
};
socket.send(JSON.stringify(message));
$("#task_name").val('').focus();
return false;
});
});