Отправка данных на веб-интерфейс с Django каналами - PullRequest
2 голосов
/ 05 апреля 2020

Я создал потребителя Django каналов, который после открытия соединения должен установить sh соединение с внешней службой, извлечь некоторые данные из этой службы и отправить данные на мой веб-интерфейс.

Вот что я попробовал:

import json
from channels.generic.websocket import WebsocketConsumer, AsyncConsumer, AsyncJsonWebsocketConsumer
from binance.client import Client
from binance.websockets import BinanceSocketManager
import time
import asyncio

client = Client('', '')

trades = client.get_recent_trades(symbol='BNBBTC')

class EchoConsumer(AsyncJsonWebsocketConsumer):

    async def connect(self):
        await self.accept()
        await self.send_json('test')

        bm = BinanceSocketManager(client)
        bm.start_trade_socket('BNBBTC', self.process_message)
        bm.start()


    def process_message(self, message):
        JSON1 = json.dumps(message)
        JSON2 = json.loads(JSON1)

        #define variables
        Rate = JSON2['p']
        Quantity = JSON2['q']
        Symbol = JSON2['s']
        Order = JSON2['m']

        print(Rate)

Когда соединение открыто, этот код начнет печатать некоторые рыночные ордера на мою консоль, как только она появится. Теперь, вместо того, чтобы печатать их на моей консоли, я хотел бы отправить их на мой интерфейс. Может кто-нибудь объяснить мне, как это сделать?

Вот мой интерфейс:

{% load staticfiles %}
<html>
  <head>
    <title>Channels</title>
  </head>
  <body>
    <h1>Testing Django channels</h1>
    <script>
    // websocket scripts
    var loc = window.location
    var wsStart = 'ws://' + window.location.host + window.location.pathname
    var endpoint = wsStart + loc.host + loc.pathname
    var socket = new WebSocket(endpoint)

    if (loc.protocol == 'https:'){
      wsStart = 'wss://'
    }

    socket.onmessage = function(e){
      console.log("message", e)
    }

    socket.onopen = function(e){
      console.log("message", e)
    }

    socket.onerror = function(e){
      console.log("message", e)
    }

    socket.onclose = function(e){
      console.log("message", e)
    }
    </script>
  </body>
</html>

1 Ответ

1 голос
/ 05 апреля 2020

Изменить функцию process_message, добавить отправку данных с помощью веб-сокетов:

def process_message(self, message):
    asyncio.create_task(self.send_json(message))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...