Django通道Websocket和HTML表

Django通道Websocket和HTML表,websocket,django-channels,django-tables2,django-database,Websocket,Django Channels,Django Tables2,Django Database,我对编程和使用django有点陌生。我使用django Channel 3和websocket构建了一个web应用程序来填充一个表,该表整合了来自不同核心的事件问题。我成功地通过websockets填充html表,并将它们存储在数据库中,但在重新加载页面时无法从数据库中检索。一旦我重新加载或重新启动页面,页面将被清除 有没有办法使html表保持不变,或者在重新加载或启动后从数据库中检索表 Consumer.py from channels.generic.websocket import Asy

我对编程和使用django有点陌生。我使用django Channel 3和websocket构建了一个web应用程序来填充一个表,该表整合了来自不同核心的事件问题。我成功地通过websockets填充html表,并将它们存储在数据库中,但在重新加载页面时无法从数据库中检索。一旦我重新加载或重新启动页面,页面将被清除

有没有办法使html表保持不变,或者在重新加载或启动后从数据库中检索表

Consumer.py

from channels.generic.websocket import AsyncWebsocketConsumer
from channels.db import database_sync_to_async
from channels.consumer import AsyncConsumer
import asyncio
import json

from .models import TableEvent

class TableData(AsyncWebsocketConsumer):

    async def connect(self):
        
        self.group_name='tableData'
        self.source = await self.get_event()
        await self.channel_layer.group_add(
            self.group_name,
            self.channel_name
        )
        print(self.group_name, self.channel_name, self.source) #testing to see if i can print from database
        await self.accept()

    async def disconnect(self,close_code):
        pass
    
    async def receive(self,text_data):
        #print(text_data)

        #Decode
        text_data_json = json.loads(text_data)
        source = text_data_json['source']
        core = text_data_json['core']
        time = text_data_json['time']
        message = text_data_json['message']
        category = text_data_json['category']

        #store event messages
        await self.store_event(source,core,time,message,category)

        await self.channel_layer.group_send(
            self.group_name,
            {
                'type':'event_message',
                'value':text_data
            }
        )

    async def event_message(self,event):
        
        message = event['value']
        print(message)
        await self.send(event['value'])

    @database_sync_to_async
    def get_event(self):
        return TableEvent.objects.all()[0].source, TableEvent.objects.all()[0].core, TableEvent.objects.all()[0].category, TableEvent.objects.all()[0].time, TableEvent.objects.all()[0].message

    @database_sync_to_async
    def store_event(self, core,source,time,message, category):
        return TableEvent.objects.create(message=message, time=time, source=source, core=core, category=category)

models.py

from django.db import models

# Create your models here.
class TableEvent(models.Model):
    source = models.TextField()
    core = models.TextField()
    category = models.TextField()
    time = models.TextField()
    message = models.TextField()
views.py

from django.shortcuts import render

# Create your views here.

def index(request):
    data={'stock1':{'source':'','core': '','category':'','time':'','message':''},}   
    context={'data':data,'tableheader':['Source','Core','Category','Date & Time','Message']}
    return render(request,'index.html',context)

index.html

<html>
    <head>
        <style>
            #customers {
              font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
              border-collapse: collapse;
              width: 100%;
            }
            
            #customers td, #customers th {
              border: 1px solid #ddd;
              padding: 8px;
              text-align: left;
            }
            
            #customers tr:nth-child(even){background-color: #f2f2f2;}
            
            #customers tr:hover {background-color: #ddd;}
            
            #customers th {
              padding-top: 12px;
              padding-bottom: 12px;
              text-align: left;
              background-color: #4CAF50;
              color: white;
            }
            </style>
    </head>
<script src='https://cdnjs.cloudflare.com/ajax/libs/reconnecting-websocket/1.0.0/reconnecting-websocket.js'></script>
<script>
    let socket = new ReconnectingWebSocket('ws://x.x.x.x:8000/ws/tableData/');
    socket.onopen = function(e){
    };

    socket.onmessage = function(e){
        console.log(e['data']);
        var recData = JSON.parse(e.data);
        tableBodyData[recData['indexName']]['message']=recData['message'];
        tableBodyData[recData['indexName']]['time']=recData['time'];
        tableBodyData[recData['indexName']]['category']=recData['category'];
        tableBodyData[recData['indexName']]['core']=recData['core'];
        tableBodyData[recData['indexName']]['source']=recData['source'];
        test = tableBodyData[recData['indexName']]['message']['time']
        console.log(test);
        createtableBody(tableContent,tableBodyData)

    };

    socket.onclose= function(e){
    };
</script>

    <body>
        <h1>Reflect Help Calls</h1>
        <table id="customers">

        </table>
    </body>
    <script>
        let tableheader = {{tableheader | safe}};
        let tableBodyData= {{data | safe}};

        function createHeader(table,headervalues){
            let tHead = table.createTHead();
            let trow = tHead.insertRow();
            for (val in headervalues){
                // console.log(headervalues[val]);
                let th =document.createElement('th');
                let text = document.createTextNode(headervalues[val]);
                th.appendChild(text);
                trow.appendChild(th);
            }
        }

        function createtableBody(table,data){
            for (element in data){
                let row = table.insertRow(1);
                for (key in data[element]){
                    let cell = row.insertCell();
                    let text = document.createTextNode(data[element][key]);
                    cell.appendChild(text);
                }
            }
        }

        var tableContent = document.getElementById('customers');
        createHeader(tableContent,tableheader);
     
    </script>
</html>


#顾客{
字体系列:“投石机MS”,Arial,Helvetica,无衬线;
边界塌陷:塌陷;
宽度:100%;
}
#客户td,#客户th{
边框:1px实心#ddd;
填充:8px;
文本对齐:左对齐;
}
#客户tr:n子(偶数){背景色:#f2f2f2;}
#客户tr:hover{背景色:#ddd;}
#顾客{
填充顶部:12px;
垫底:12px;
文本对齐:左对齐;
背景色:#4CAF50;
颜色:白色;
}
let socket=新的重新连接WebSocket('ws://x.x.x.x:8000/ws/tableData/');
socket.onopen=函数(e){
};
socket.onmessage=函数(e){
log(e['data']);
var recData=JSON.parse(e.data);
tableBodyData[recData['indexName']['message']=recData['message'];
tableBodyData[recData['indexName']['time']=recData['time'];
tableBodyData[recData['indexName']['category']=recData['category'];
tableBodyData[recData['indexName']['core']=recData['core'];
tableBodyData[recData['indexName']['source']=recData['source'];
测试=tableBodyData[recData['indexName']['message']['time']
控制台日志(测试);
createtableBody(tableContent、tableBodyData)
};
socket.onclose=函数(e){
};
反映求助电话
设tableheader={tableheader|safe};
设tableBodyData={data | safe};
函数createHeader(表,headervalues){
设tHead=table.createTHead();
设trow=tHead.insertRow();
for(表头值中的val){
//console.log(headervalues[val]);
设th=document.createElement('th');
让text=document.createTextNode(headervalues[val]);
附文(正文);
附肢儿童(th);
}
}
函数createtableBody(表,数据){
for(数据中的元素){
let row=table.insertRow(1);
for(输入数据[元素]){
let cell=row.insertCell();
让text=document.createTextNode(数据[element][key]);
单元格.appendChild(文本);
}
}
}
var tableContent=document.getElementById('customers');
createHeader(tableContent,tableheader);