#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, который вы создадите между клиентом и сервером, хотя это не обязательно должно быть сложным).