Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Обработка GET-запросов на python: сохранить значение из одного запроса и отдать в другом

#python #get #cgi #esp8266


Добрый день! Написал (точнее скопипастил) такой сервер:

from http.server import HTTPServer, CGIHTTPRequestHandler
import time

server_address = ('192.168.0.198', 800)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
begin_time = time.asctime()
print('Server started on', begin_time)
print('Server is running on address', server_address[0], 'on port', server_address[1])
httpd.serve_forever()


Он принимает данные (GET-запрос) с платы ESP8266. Эти данные в консоли отображаются,
но вот нормально их обработать не могу (хочу выводить на отдельной странице).

Что посоветуете?

UPD. С точки зрения пользователя должно быть так: зашел на 192.168.0.198:800/...
и увидел окошко со значением температуры (её я и получаю get-запросом). На этом же
адресе запущен сервер.
    


Ответы

Ответ 1



микроконтроллер с датчиком температуры отправляет показания методом get Чтобы создать http-сервер, который записывает температуру, полученную в GET запросе от микроконтроллера, и показывает её позже в последующих запросах, можно использовать bottle библиотеку: #!/usr/bin/env python from bottle import route, request, run, template # $ pip install bottle temperature = None @route('/') def index(): global temperature temperature = request.query.temperature or temperature return template('Temperature: {{temperature}}', temperature=temperature) run(host='localhost', port=8000) При запуске этого Питон-скрипта, запускается http-cервер, который слушает на локальной машине на 8000 порту. При получении GET-запроса, содержащего temperature параметр, глобальная переменная temperature обновляется и тут же показывается как html. Если temperature параметр не указан, то возвращается предыдущее значение или None, если ещё ни разу не был temperature параметр задан. То есть ожидается, что часть читающая температуру с датчика выполняет запросы типа: $ http ':8000?temperature=20' что устанавливает значение (20). Чтобы прочитать это значение, достаточно не указывать параметр: $ http :8000 Можно в браузере посмотреть (тот же запрос): $ python -mwebbrowser http://localhost:8000 http команду можно получить, установив httpie библиотеку: $ pip install httpie Обычно вместо использования глобальных переменных используется база данных (что позволяет сохранять значение температуры между запусками серверного процесса или его экземплярами в разных процессах). В простейшем случае, простой плоский текстовый файл может использован. Вот пример c sqlite. Если не хочется ставить bottle с помощью команды (предпочтительно внутри virtualenv): $ pip install bottle то достаточно скачать bottle.py и положить его рядом с кодом сервера.

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

Отправить комментарий