как отобразить вывод скрипта на веб-странице flask / django

#python #flask

#python #flask

Вопрос:

привет, я создаю клиентскую модель сервера, в которой клиент постоянно проверяет, добавлено ли новое устройство или нет, и отправляет ответ на серверную сторону, он работает нормально, что я хочу отображать ответ, который я получаю от клиента к серверу в веб-браузере, постоянно используя flask или Django.

это мой клиентский код

 from socket import *
import subprocess, string, time

host = 'localhost'  # '127.0.0.1' can also be used
port = 53000
sock = socket()

# Connecting to socket
sock.connect((host, port))  # Connect takes tuple of host and port

def detect_device(previous):
    import socket
    username2 = socket.gethostname()
    ip=socket.gethostbyname(username2)
    total = subprocess.run('lsblk | grep disk | wc -l', shell=True, stdout=subprocess.PIPE).stdout
    time.sleep(3)

# if conditon if new device add
    if total>previous:
     response = "Device Added in "   username2   " "   ip
     sock.send(response.encode())
# if no new device add or remove
    elif total==previous:
     detect_device(previous)
# if device remove
    else:
     response = "Device Removed in "   username2   " "   ip

     sock.send(response.encode())
# Infinite loop to keep client running.


while True:
    data = sock.recv(1024)
    if (data == b'Hi'):
        while True:
            detect_device(subprocess.run(' lsblk | grep disk | wc -l', shell=True , stdout=subprocess.PIPE).stdout)

sock.close() 
  

это мой код на стороне сервера

 from socket import *
# Importing all from thread
import threading

# Defining server address and port
host = 'localhost'
port = 53000

# Creating socket object
sock = socket()
# Binding socket to a address. bind() takes tuple of host and port.
sock.bind((host, port))
# Listening at the address
sock.listen(5)  # 5 denotes the number of clients can queue

def clientthread(conn):
    # infinite loop so that function do not terminate and thread do not end.
    while True:
        # Sending message to connected client
        conn.send('Hi'.encode())  # send only takes string
        data =conn.recv(1024)
        print (data.decode())
while True:
    # Accepting incoming connections
    conn, addr = sock.accept()
    # Creating new thread. Calling clientthread function for this function and passing conn as argument.
    thread = threading.Thread(target=clientthread, args=(conn,))
    thread.start()

conn.close()
sock.close()
  

это вывод на стороне сервера

Device Added in wraith 192.168.10.9

Device Removed in wraith 192.168.10.9

мне нужно отобразить этот вывод на веб-странице.

Ответ №1:

Flask и Django — это фреймворки веб-приложений, предназначенные для протокола HTTP, но вы используете низкоуровневую socket библиотеку и в основном не используете какой-либо установленный протокол. Если вы хотите использовать Flask / Django, потому что хотите иметь платформу вещания для результатов вашего клиентского скрипта для просмотра на стороне устройства, то я рекомендую вместо socket этого использовать requests (link) в вашем клиентском скрипте для отправки HTTP-запроса POST в ваше веб-приложение Flask / Django. Что касается того, как создать приложение, для этого есть учебные пособия. Я хочу отметить, что минималистичный Flask, вероятно, лучше подходит для этого проекта, чем более упрямый фреймворк Django.

Комментарии:

1. привет, вы можете изменить код клиента, как я отправляю запрос, спасибо.

2. @niftykhan В requests документации показано, как выполнять HTTP-запросы, включая метод POST, с помощью этой библиотеки. Что касается точного кода, который вам понадобится, это будет зависеть от структуры запроса, которую будет ожидать ваше веб-приложение (он же API, который вы создадите между клиентом и сервером, хотя это не обязательно должно быть сложным).