Форум сайта python.su
Меняем задачу - вот код:
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) ourstring = "username={0}&password={1}".format(username, password) return '<html><body><h1>Hello World {}</h1></body></html>'.format(ourstring) if __name__ == "__main__": app.debug = True serve(app, host='192.168.0.103', port=5000)
Get http://192.168.0.103:5000/?username=py.user&password=12345
<html><body><h1>Hello World username=py.user&password=12345</h1></body></html>
Офлайн
DessanВо-первых, убери print'ы из функции index(). Их там не должно быть. Для отладки используй запись в файл. Во-вторых, что с шаблоном, что без шаблона генерация данных будет происходить каждый раз заново и возвращаемое значение будет оформляться в объект класса Response. Ты возвращаешь строку, а на самом деле эта строка передаётся в конструктор класса Response и возвращается экземпляр класса Response. Дальше экземпляр класса Response преобразуется в HTTP-Response и уже в виде последовательности байт передаётся по TCP. Так что шаблон мог и не убирать, результат будет всё равно одинаковым на выходе. В-третьих, у тебя код с логической ошибкой: что произойдёт, если там будет POST-запрос? Где он возьмёт ourstring, если та спрятана в if'е? Естественно, этот код выпадет при POST-запросе, так как не найдёт имя ourstring.
Меняем задачу - вот код:
DessanОна и так выводится. Ты с клиента послал запрос, на клиенте получил ответ, в ответе есть и имя, и пароль, которые ты посылал с клиента.
Как сделать так, чтоб при получении этого get запроса у нас выводилась Html страница
DessanПошли другие параметры в GET-запросе, и оно выдаст тебе страницу с новым именем и новым паролем, взятыми из GET-запроса.
И текст страницы сам обновлялся при получении других параметров.
Отредактировано py.user.next (Апрель 13, 2020 22:03:40)
Офлайн
А я post запросы отправлять никуда не буду и потому решил, что они мне вообще не нужны. А параметры get запроса я менял и посылал несколько раз. По поводу браузерного кэширования я не подумал, но как я понимаю последние полученные данные должны храниться в переменных на сервере и если я нажму ctrl+f5 то страница должна полностью обновиться без подгрузки из кэша и подгрузить данные из сервера в свои шаблоны или просто вывести текст на страницу. Или я ошибаюсь? Но это как-то не помогает. Браузер яндекс. Оперу и firefox я и не использовал никогда.
py.user.next- так и есть
Она и так выводится. Ты с клиента послал запрос, на клиенте получил ответ, в ответе есть и имя, и пароль, которые ты посылал с клиента
Офлайн
DessanКод надо писать без ошибок. Если не нужен POST-запрос, тогда его вообще надо убрать из обработки и if, проверяющий метод запроса, тоже убрать. Когда ошибки оставляешь, к ним потом добавляются новые ошибки, которые ты тоже оставляешь. В итоге получается клубок ошибок, которые действуют вместе и по отдельности явно и неявно. В итоге всё время будет уходить на поиск причины внезапно возникшей проблемы, а причина будет потом в конце найдена в какой-нибудь из оставленных ранее ошибок.
А я post запросы отправлять никуда не буду и потому решил, что они мне вообще не нужны.
DessanДа нет. Как мы выяснили, дело-то не в этом. Дело в том, что ты даже не понимаешь, что ты делаешь и как что работает на низком уровне.
По поводу браузерного кэширования я не подумал
DessanТам ничего не хранится. Функция при каждом обновлении страницы запускается заново и заново генерирует всё. Переменные при каждом обновлении страницы присваиваются также с нуля.
но как я понимаю последние полученные данные должны храниться в переменных на сервере и если я нажму ctrl+f5 то страница должна полностью обновиться
Отредактировано py.user.next (Апрель 15, 2020 16:02:02)
Офлайн
py.user.nextСпасибо, исправлюсь
Код надо писать без ошибок. Если не нужен POST-запрос, тогда его вообще надо убрать из обработки и if, проверяющий метод запроса, тоже убрать. Когда ошибки оставляешь, к ним потом добавляются новые ошибки, которые ты тоже оставляешь. В итоге получается клубок ошибок, которые действуют вместе и по отдельности явно и неявно. В итоге всё время будет уходить на поиск причины внезапно возникшей проблемы, а причина будет потом в конце найдена в какой-нибудь из оставленных ранее ошибок.
py.user.nextСкорее всего мои скромные познания от нехватки опыта спутаны и не систематизированы. Нет у меня знакомых программистов, которые бы внесли небольшие корректировки. А на форумах когда что-то спрашиваю, то получаю либо обрывки фраз, что наваливает ещё больше поиска и разной информации, что вносит ещё больше путаницы, так как я не знаю, что мне нужно для решения данной проблемы, а что не нужно, либо “профессура” начинает поучительные разговоры о том как долга и как сложна жизнь программиста и как только избранный сможет постичь сию магию кода, вместо того, чтоб дать конкретные ответы. Так люди и забивают потом на свои идеи и теряют интерес к кодингу.
Да нет. Как мы выяснили, дело-то не в этом. Дело в том, что ты даже не понимаешь, что ты делаешь и как что работает на низком уровне.
py.user.nextТо есть если я запускаю сервер и отправляю первый get на него, то этот get не хранится в переменных сервера до следующего запроса к серверу? То что html стирает все содержимое переменных после обновления страницы я знаю.
Там ничего не хранится. Функция при каждом обновлении страницы запускается заново и заново генерирует всё. Переменные при каждом обновлении страницы присваиваются также с нуля.
py.user.nextВсунул, потому что я не знаю, что конкретно нужно использовать в данном случае, а jquery вроде несложный. К тому же везде в интернете jquery всегда присутствует во всех примерах, которые связаны с html.
Ты зачем вообще туда jQuery поставил? AJAX, который тебе нужен, никакого отношения к нему не имеет.
Офлайн
DessanНе хранится. Он только тебе ответ выдал и очистился сразу, как будто тебя и не было. И это при каждом запросе происходит, даже если они полностью одинаковые.
То есть если я запускаю сервер и отправляю первый get на него, то этот get не хранится в переменных сервера до следующего запроса к серверу?
DessanНе html стирает, а браузер перестраивает DOM. Объектная модель документа строится из HTML-кода страницы. Но DOM можно менять и через JavaScript-скрипты, поэтому часто на сайтах в коде страницы многие поля пустые, а когда ты в браузере её открываешь, они заполнены.
То что html стирает все содержимое переменных после обновления страницы я знаю.
DessanОн не сложный, если ты его знаешь - как минимум книжку прочитал по нему. А ты не знаешь его и добавляешь, когда он нафиг не нужен, плюс его ещё закачивать надо или хранить.
Всунул, потому что я не знаю, что конкретно нужно использовать в данном случае, а jquery вроде несложный. К тому же везде в интернете jquery всегда присутствует во всех примерах, которые связаны с html.
DessanДля тебя всё сложно, потому что ты ни одной книги не прочитал. В целом вся твоя задача не сложная, но сделать ты её не можешь, потому что ничего не знаешь и пальцем в небо тычешь всё время. Это ложное впечатление у тебя. Напиши код на JavaScript, который буквы выводит лесенкой на странице. Задачка на десять минут, у тебя на неё уйдёт неделя, так и результат будет нулевой ещё.
В принципе javascript тоже несложный.
DessanЧто именно отправляется серверу, можно в браузере посмотреть. В инструментах разработчика есть вкладка Сеть. Все запросы пишутся туда.
Как я не стараюсь изучить их - что отправляю через ajax я примерно себе представляю
DessanСначала нужно выяснить, нужен ли тебе CORS вообще. Если CORS нужен, то настроить на своём сервере его можно без проблем. На чужом сервере может не быть такой возможности. В любом случае, если можно построить архитектуру так, чтобы в ней не было межсайтовых запросов, для которых надо CORS настраивать, нужно так и сделать. Но далеко не всегда такое прокатывает.
Если есть где-то внятное объяснение как формировать ответ домашнего сервера
Отредактировано py.user.next (Апрель 16, 2020 00:31:25)
Офлайн
py.user.nextПонял, спасибо
Не хранится. Он только тебе ответ выдал и очистился сразу, как будто тебя и не было. И это при каждом запросе происходит, даже если они полностью одинаковые.
py.user.nextДа, прочитал и закачать не так сложно, но если надо - буду использовать чистый javascript.
Он не сложный, если ты его знаешь - как минимум книжку прочитал по нему. А ты не знаешь его и добавляешь, когда он нафиг не нужен, плюс его ещё закачивать надо или хранить.
Используй XMLHttpRequest(), который есть в любом браузере.
py.user.nextСетью никогда не пользовался, только консолью и ресурсами, надо попробовать, спасибо.
В инструментах разработчика есть вкладка Сеть. Все запросы пишутся туда
from flask_cors import CORS app = Flask(__name__) CORS(app)
Отредактировано Dessan (Апрель 16, 2020 00:32:44)
Офлайн
DessanЯ пока что этого нигде не увидел.
CORS нужен
Отредактировано py.user.next (Апрель 16, 2020 00:40:56)
Офлайн
py.user.next
Напиши код на JavaScript, который буквы выводит лесенкой на странице. Задачка на десять минут, у тебя на неё уйдёт неделя, так и результат будет нулевой ещё.
<!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SITE</title> <style type="text/css"> body {background-color: #CCCCCC} </style></head> <body> <div class="container"> <form class="text_form" role="form"> <input type="text" name="user_text" class="form-control" placeholder="Enter the text" size="50" required autofocus> <button id = "Transform" class="submit_button" type="button">Transform</button> </form> </div> <pre id = "result"></pre> <script> var user_text = document.getElementsByName('user_text')[0]; document.getElementById('Transform').onclick = function (){ console.log(user_text.value); document.getElementById('result').innerHTML = ''; var text_adjust = user_text.value.match(/\w+/g).join('').split(''); for (var i=0; i < text_adjust.length; i++){ document.getElementById('result').innerHTML += text_adjust[i]+'<br />'+' '.repeat(i+1); } } </script> </body></html>
Отредактировано Dessan (Апрель 16, 2020 17:38:50)
Офлайн
Dessan
Не знаю верно ли я понял задание, но ушло примерно 5 часов
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Print Letters</title> </head> <body> <script type="text/javascript"> function f(ch, nlines) { for (let i = 0; i < nlines; i++) { document.write(ch.repeat(i + 1) + "<br>"); } } f("a", 10); f("b", 20); function g(str) { let space = " "; for (let i = 0; i < str.length; i++) { document.write(space.repeat(i) + str[i] + "<br>"); } } g("abcdefghijkabcdefghijkabcdefghijkabcdefghijk"); g("1234567890123456789012345678901234567890"); </script> </body> </html>
Отредактировано py.user.next (Апрель 17, 2020 02:04:50)
Офлайн