Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106

Создание и редактирование web содержимого на Python

27.03.2020, 17:29. Показов 3807. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,

Не знаю в какую сторону копать гранит науки, подскажите. Мне нужно, чтоб html страница на одном компьютере обрабатывала локальные мои запросы к ней с другого компьютера и изменяла своё содержимое соответственно. Как я понял мне нужен веб сервер на Python, который будет обрабатывать get запросы (get вполне меня устраивает). На просторах интернета я нашёл много разной литературы и у меня получился вот такой код, который прекрасно отлавливает get запросы, но я не знаю как мне сделать отображение html тегов и вписывать в них результат обработки get запроса.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from http.server import HTTPServer, CGIHTTPRequestHandler 
import socket, re, cgi 
from io import BytesIO
import simplejson as json
 
if len(socket.gethostbyname_ex(socket.gethostname())[2]) >= 1:
    print("Сервер запущен на адресе: %s"%socket.gethostbyname_ex(socket.gethostname())[2][0])
 
class HttpProcessor(CGIHTTPRequestHandler):
 
  def _send_cors_headers(self):
      """ Sets headers required for CORS """
      self.send_header("Access-Control-Allow-Origin", "*")
      self.send_header("Access-Control-Allow-Methods", "GET,POST,OPTIONS")
      self.send_header("Access-Control-Allow-Headers", "x-api-key,Content-Type")
 
  def send_dict_response(self, response):
     
      self.wfile.write(bytes(json.dumps(response), "utf8")) 
      
      
  def do_OPTIONS(self):
      self.send_response(200)
      self._send_cors_headers()
      self.end_headers()
 
  def do_GET(self):
      self.send_response(200)
      self._send_cors_headers()
      self.end_headers()
          
      get_data = re.findall('\w+', self.path)
      
      response = {}
      print("response 1 = ", response)
     
      for i in range(0, len(get_data)-1, 2):
        response[get_data[i]] = get_data[i+1]    
 
      self.send_dict_response(response)
 
 
 
 
server_address = ("192.168.0.105", 5000) 
httpd = HTTPServer(server_address, HttpProcessor) 
httpd.serve_forever()
Например, я делаю такой запрос с другого компьютера http://192.168.0.105:5000/?use... word=12345
и серверная часть прекрасно его принимает и создаёт из них ассоциативный список (словарь), но я не знаю как сделать, чтоб отображалась html страница ещё и при этом:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
my_page_content = b"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head>\
<body>\
    <div id=\"logo\">\
     <a href=\"#\" title='To main page'>My Site</a>\
     </div>\
     <div id=\"menuHeader\">\
    <a href=\"#\"> About</a> | <a href=\"#\">FeedBack</a>\
     </div>\
     <div id=\"regAuth\">\
      <a href=\"#\">Register</a> | <a href=\"#\">Autorization</a>\
     </div>\
<div id=\"Name\">Name:<div id=\"received_name\">NON</div></div>\
<div id=\"Password\">Password:<div id=\"received_password\">NON</div></div>\
</body>\
</html>"
И как мне потом всунуть логин и пароль в нужные мне теги этой страницы?

Добавлено через 1 минуту
Сейчас всё что отображается на моей веб странице - это {} и я не совсем понимаю почему там вообще что-то отображается
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2020, 17:29
Ответы с готовыми решениями:

Редактирование содержимого файла
Доброго времени суток. Имеется следующая программа, которая открывает или создает файл для записи. Интересует функция перезаписи, но не...

Редактирование содержимого ListBox
В ListBox выводится информация. Как можно осуществить изменение выведенной строки при выделении ее и нажатии на соответствующую кнопку ...

Редактирование содержимого RichTextBox
Как редактировать содержимого RichTextBox ?

26
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
30.03.2020, 17:12
Цитата Сообщение от DessanM Посмотреть сообщение
И как мне потом всунуть логин и пароль в нужные мне теги этой страницы?
Вам шаблонизатор нужен. Как минимум так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
my_page_content = '''\
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
<body>
  <div id="logo"
     <a href="#" title='To main page'>My Site</a>
  </div>
  <div id="menuHeader">
    <a href="#"> About</a> | <a href="#">FeedBack</a>
  </div>
  <div id="regAuth">
    <a href="#">Register</a> | <a href="#">Autorization</a>
  </div>
  <div id="Name">Name:<div id="received_name">{name}</div></div>
  <div id="Password">Password:<div id="received_password">{password}</div></div>
</body>
</html>'''.format(name='fox', password='TrixieISbestpony')
print(my_page_content)
Добавлено через 2 минуты
Но лучше шаблоны хранить в отдельных файлах.
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
30.03.2020, 17:47  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Вам шаблонизатор нужен.
Мне подсказали, что не только шаблонизатор. Мне нужен flask, к нему шаблонизатор jinja и все это ставить на сервер waitress, так как у меня windows. Ищу сейчас информацию про waitress. Может подскажете какую-то хорошую статью? Как я понял, мне никаких виртуальных сред ставить не нужно, у меня питон 3.7.3 и можно прямо ставить и запускать waitress.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
30.03.2020, 17:54
dev-сервер фласка запускается прямо из консоли - ничего больше не нужно.

Создание виртуального окружения - опционально.
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
30.03.2020, 18:13  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
dev-сервер фласка запускается прямо из консоли - ничего больше не нужно.
В смысле мне waitress запускать не надо?Использовать стандартный flask? Я почитал по форумам и все пишут, что он работает нестабильно и нужен сервер типа Gunicorn но так как у меня windows то мне нужен waitress.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
30.03.2020, 18:30
Ну да. Разработка (написание кода) - это одно. Разворачивание на боевом сервере - другое.
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
07.04.2020, 22:10  [ТС]
В продолжение темы - создал файл flserv.py, папки static и templates, в templates положил страницу index.html, в static положил картинки, style.css, jquery-3.4.1.js (это чтоб не нужно было в интернете подгружать его), main.js - файл со всеми скриптами. Сервер с waitress успешно запускается, отображает страницу, картинки, стили, а js не отрабатывает. Почему?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
07.04.2020, 22:29
Цитата Сообщение от DessanM Посмотреть сообщение
Почему?
Могу ответить в рифму.
Ты фласк приложение делаешь?

Покажи код, структуру приложения.
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
07.04.2020, 23:02  [ТС]
особо показывать нечего

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import Flask, render_template
from waitress import serve
 
app = Flask(__name__)
 
@app.route('/') 
def index():
    return render_template("index.html")
 
@app.route('/hello/')  
def hello():
    return 'hello page'
 
if __name__ == "__main__":
    
    serve(app, host='192.168.0.103', port=5000)
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Site </title>
<link rel="shortcut icon" href="{{url_for('static', filename = 'favicon.ico')}}" type="image/x-icon">
 
<link href="{{url_for('static', filename = 'style.css')}}" rel="stylesheet"  type="text/css">
<script  src="{{url_for('static', filename = 'main.js')}}"></script>
 
<script  src="{{url_for('static', filename = 'jquery.js')}}"></script>
 
</head>
<body>
<header>
       <div id="logo">
       
     </div>
 </header>
 
<div id="content">
<h1>Welcome!</h1>
          <button onclick="hello()">Click Here!</button>
</div>
</body>
</html>
JavaScript
1
2
3
function hello() {
                  alert('Hello!');
              }
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
07.04.2020, 23:06
DessanM, уверен, что скрипт не подгружается? может, ты функцию просто не выполняешь.

Добавлено через 49 секунд
JavaScript
1
2
3
function hello() {
  alert('Hello!');
}()
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
07.04.2020, 23:11  [ТС]
Если без сервера то все грузится и показывает отлично. Там ещё затухающая шапка есть вверху сайта и она не только не видна независимо от положения скролла, а просто ведёт себя как обычный текст. А кнопку я уже для наглядности вставил. Кликаю на неё и никакой алерт не появляется.

Добавлено через 1 минуту
Самовызывающаяся функция не срабатывает тоже

Добавлено через 1 минуту
такое чувство что я с путями к файлам напутал что-то, но тогда непонятно почему картинки отображаются. Все лежит в корне папки static
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
07.04.2020, 23:27
DessanM, посмотри в инспекторе, подгружаются ли. поставь console.log в скрипте или дебаггер
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
07.04.2020, 23:50  [ТС]
Действительно...Оказалось ему не нравится знак $ , то есть ругается на jquery. А сам javascript отрабатывает. А то что ты прислал нужно записать как

JavaScript
1
2
3
(function (){
  alert('Hello!');
})()
Есть идеи как подключить jquery?
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
07.04.2020, 23:51
DessanM, в темплейт подключаешь. Можешь с cdn, можешь локально загрузить
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
07.04.2020, 23:59  [ТС]
Цитата Сообщение от m0nte-cr1st0 Посмотреть сообщение
DessanM, в темплейт подключаешь. Можешь с cdn, можешь локально загрузить
не в статик, а в темплейт? СDN - это сервер?весь мой компьютер и есть сервер сам себе...
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
08.04.2020, 00:02
DessanM, все плохо, я понял. Мог бы хоть это загуглить.
https://stackoverflow.com/a/29877900/11214129
Только посмотри, какая там версия у них свежая сейчас.
1
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
08.04.2020, 00:21  [ТС]
Спасибо, там внизу есть комментарий о том, что если расположить файл jquery ниже файлов скриптов - ничего работать не будет. Поставил ссылку на файл jquery вверх и все заработало. Спасибо
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
08.04.2020, 12:45  [ТС]
Новая трудность.

Принимаем Get запросы сервером и обрабатываем их, но при этом содержимое веб страницы не обновляется самостоятельно. Я не понимаю, где происходить должна обработка Get запросов - в серверном файле питона или уже на странице html?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 from flask import Flask, render_template, request
from waitress import serve
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route('/', methods=['GET', 'POST']) #  
def index():
    if request.method == 'GET':
        username = request.args.get('username', '')
        password = request.args.get('password', '')
        print(username)
        print(password)
        
    return render_template("index.html", my_string="it works!", my_list=[0,1,2,3,4,5], username = username, password = password)
if __name__ == "__main__":
    app.debug = True 
    serve(app, host='192.168.0.103', port=5000)
HTML5
1
2
3
4
5
6
7
8
9
10
 <p>My string: {{my_string}}</p>
<p>Value from the list: {{my_list[3]}}</p>
<div id="log">Login:<div id="pass">0</div>here</div>
<script>
    setInterval(function(){
        
        $("#pass").html("<p>{{password}}</p>");
        console.log("{{password}}")
    }, 5000);
</script>
То что не изменяется (my_string, my_list)- отображается верно, а пароль вообще не выводит. setInterval я уже как вариант добавил но и с ним не работает. По задумке на сервер должно приходить порядка 15 get запросов в минуту с данными в виде чисел и букв, все это обрабатывается и выводится на web содержимом сервера flask.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
08.04.2020, 12:51
http://192.168.0.103:5000/?use... IsBestPony
0
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
08.04.2020, 13:14  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
http://192.168.0.103:5000/?username=fox&password=TrixieIsBestPony
Да, вот такой Get запрос приходит и на стороне сервера я получаю отдельно пароль TrixieIsBestPony, теперь мне его нужно отобразить на странице html без перезагрузки всей страницы. Через какое-то время пароль меняется и на странице уже должен быть новый пароль без перезагрузки всей страницы. Как мне это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2020, 13:14
Помогаю со студенческими работами здесь

Редактирование содержимого bat файла
QStringList strList; /*Считываем исходный файл в контейнер*/ if ((file.exists())&amp;&amp;(file.open(QIODevice::ReadOnly))) { ...

Запретить редактирование содержимого Shapes
здравствуйте как это сделать в Ворде и при помощи ВБА

Редактирование содержимого текстового файла
Есть текстовый файлик типа: первая строка вторая строка третья строка четвертая строка пятая строка шестая строка седьмая...

Редактирование содержимого текстового файла
Доброе время суток, Уважаемые знатоки! Такая ситуация есть txt файл (допустим files.txt) с таким содержимым: ...

Редактирование содержимого формы аяксом реализуемо?
Задача : сделать форму с меняющимися внутренними компонентами по требованию. Пример кода: &lt;h:form&gt; &lt;ul&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru