возможно, что есть что-то готовое, но слегка не такое, или возможен лучший дизайн, или откуда-то этот код можно выдрать — так что вперед
цель: мгновенно делать веб-интерфейсы, причем:
1. схемы данных нет и на следующий день (для тех же данных) она будет совсем другая, поэтому нужно результат получать в виде key-value
2. не хочется ничего устанавливать в систему
как я это вижу: запускается скрипт (который я так же буду называть сервером)
/path/to/script/key-value-server 127.0.0.1:8080 /home/username/my_file.txt
скрипт читает все записи файла /home/username/my_file.txt, парсит их как значения «key»:«value», выбирает *последнее* значения для каждого ключа как текущее значение, и затем вешается на порт 8080 и выдает http-ответы (какие — см. ниже)
ручками или каким-то третьим скриптом я генерирую статический html-файл например такой:
<html><head><script src="http://127.0.0.1:8080/main.js"></script></head>
<body onLoad="main_on_load()"><form>
<input type=checkbox name=foo123>
<input type=text name=bar456>
</form></body></html>
и открываю его в браузере
что делает main.js:
1. сразу после загрузки оббегает все элементы всех форм на странице и пытается получить их значения от сервера, выдавая запросы вида
http://127.0.0.1:8080/get_value?name=foo123
http://127.0.0.1:8080/get_value?name=bar456
2. если значения получены, заполняет ими элементы формы; если нет, то запоминает значение элементов формы по умолчанию
3. каждую секунду оббегает все элементы всех форм на странице, и если чье-то значение поменялось — например, был напечатан тексте hello в текстовом поле — выдает запрос http://127.0.0.1:8080/set_value?name=bar456&value=hello — хотя, возможно, post-запрос все же лучше
сервер, получив запрос http://127.0.0.1:8080/set_value?name=bar456&value=hello, дописывает скажем строчку
"bar456":"hello"
в файл /home/username/my_file.txt, и на время сессии запоминает, что значением ключа «bar456» являет «hello»
если через секунду в поле «bar456» появится «hello world», то все повторяется уже с ним, и сервер отдает уже не «hello», а «hello world» при обращении http://127.0.0.1:8080/get_value?name=bar456 — так что в принципе, дешево и сердито, с этими данными могут работать и несколько клиентов (в т.ч. и по сети, если не 127.0.0.1)
специально уточню, что:
1. всю форму сабмитить не предполагается (кнопки сабмит вы не зря не видите), хотя это возможно как дополнение
2. почему каждую секунду, а не onChange? менее затратно, по-моему — хотя если можно сделать чтобы скрипт на onChange не вис при вставке 100 кб текста в поле — можно и onChange
3. никаких проверок целостности данных и отсутствия гонок не предполагается
4. в системе не должно требоваться наличие веб-сервера
5. как дополнение, возможна запись в /home/username/my_file.txt с тайм-штампом, скажем
{ "time_stamp":"2016.07.05 12:01:01", "bar456":"hello" }
6. как дополнение, возможно не затирание прошлого value, а конкатенация с ним через разделитель, типа конца строки или <p> (но это надо как-то записать в форме)
7. не обязательно скрипт, можно и статически слинкованный бинарник (хотя я подозреваю, что его иногда придется править по-живому)
этого в принципе хватит, чтобы мгновенно сделать веб-интерфейс; а результаты из файла /home/username/my_file.txt можно доставать каким-то своим скриптом по мере надобности