Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2020 03:03:20

Dessan
Зарегистрирован: 2019-10-16
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Javascript и flask

Меняем задачу - вот код:

  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
Как сделать так, чтоб при получении этого get запроса у нас выводилась Html страница

 <html><body><h1>Hello World username=py.user&password=12345</h1></body></html>
И текст страницы сам обновлялся при получении других параметров.

Офлайн

#2 Апрель 13, 2020 21:57:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8464
Репутация: +  759  -
Профиль   Отправить e-mail  

Javascript и flask

Dessan
Меняем задачу - вот код:
Во-первых, убери print'ы из функции index(). Их там не должно быть. Для отладки используй запись в файл. Во-вторых, что с шаблоном, что без шаблона генерация данных будет происходить каждый раз заново и возвращаемое значение будет оформляться в объект класса Response. Ты возвращаешь строку, а на самом деле эта строка передаётся в конструктор класса Response и возвращается экземпляр класса Response. Дальше экземпляр класса Response преобразуется в HTTP-Response и уже в виде последовательности байт передаётся по TCP. Так что шаблон мог и не убирать, результат будет всё равно одинаковым на выходе. В-третьих, у тебя код с логической ошибкой: что произойдёт, если там будет POST-запрос? Где он возьмёт ourstring, если та спрятана в if'е? Естественно, этот код выпадет при POST-запросе, так как не найдёт имя ourstring.

Dessan
Как сделать так, чтоб при получении этого get запроса у нас выводилась Html страница
Она и так выводится. Ты с клиента послал запрос, на клиенте получил ответ, в ответе есть и имя, и пароль, которые ты посылал с клиента.

Dessan
И текст страницы сам обновлялся при получении других параметров.
Пошли другие параметры в GET-запросе, и оно выдаст тебе страницу с новым именем и новым паролем, взятыми из GET-запроса.

Может быть, проблема с браузером какая-то. Для её исключения используй telnet или netcat. Прямо из netcat отправляешь HTTP-запрос и смотришь, что приходит в ответ. Так ты исключишь браузерное кэширование, если оно там есть и грузит старую страницу.



Отредактировано py.user.next (Апрель 13, 2020 22:03:40)

Офлайн

#3 Апрель 15, 2020 13:49:17

Dessan
Зарегистрирован: 2019-10-16
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Javascript и flask

А я post запросы отправлять никуда не буду и потому решил, что они мне вообще не нужны. А параметры get запроса я менял и посылал несколько раз. По поводу браузерного кэширования я не подумал, но как я понимаю последние полученные данные должны храниться в переменных на сервере и если я нажму ctrl+f5 то страница должна полностью обновиться без подгрузки из кэша и подгрузить данные из сервера в свои шаблоны или просто вывести текст на страницу. Или я ошибаюсь? Но это как-то не помогает. Браузер яндекс. Оперу и firefox я и не использовал никогда.

py.user.next
Она и так выводится. Ты с клиента послал запрос, на клиенте получил ответ, в ответе есть и имя, и пароль, которые ты посылал с клиента
- так и есть

А принты я вставил временно специально, чтоб проверить получает ли что-то сервер мой вообще.


Офлайн

#4 Апрель 15, 2020 16:00:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8464
Репутация: +  759  -
Профиль   Отправить e-mail  

Javascript и flask

Dessan
А я post запросы отправлять никуда не буду и потому решил, что они мне вообще не нужны.
Код надо писать без ошибок. Если не нужен POST-запрос, тогда его вообще надо убрать из обработки и if, проверяющий метод запроса, тоже убрать. Когда ошибки оставляешь, к ним потом добавляются новые ошибки, которые ты тоже оставляешь. В итоге получается клубок ошибок, которые действуют вместе и по отдельности явно и неявно. В итоге всё время будет уходить на поиск причины внезапно возникшей проблемы, а причина будет потом в конце найдена в какой-нибудь из оставленных ранее ошибок.

Dessan
По поводу браузерного кэширования я не подумал
Да нет. Как мы выяснили, дело-то не в этом. Дело в том, что ты даже не понимаешь, что ты делаешь и как что работает на низком уровне.

Dessan
но как я понимаю последние полученные данные должны храниться в переменных на сервере и если я нажму ctrl+f5 то страница должна полностью обновиться
Там ничего не хранится. Функция при каждом обновлении страницы запускается заново и заново генерирует всё. Переменные при каждом обновлении страницы присваиваются также с нуля.

Ты зачем вообще туда jQuery поставил? AJAX, который тебе нужен, никакого отношения к нему не имеет.



Отредактировано py.user.next (Апрель 15, 2020 16:02:02)

Офлайн

#5 Апрель 15, 2020 20:34:19

Dessan
Зарегистрирован: 2019-10-16
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Javascript и flask

py.user.next
Код надо писать без ошибок. Если не нужен POST-запрос, тогда его вообще надо убрать из обработки и if, проверяющий метод запроса, тоже убрать. Когда ошибки оставляешь, к ним потом добавляются новые ошибки, которые ты тоже оставляешь. В итоге получается клубок ошибок, которые действуют вместе и по отдельности явно и неявно. В итоге всё время будет уходить на поиск причины внезапно возникшей проблемы, а причина будет потом в конце найдена в какой-нибудь из оставленных ранее ошибок.
Спасибо, исправлюсь

py.user.next
Да нет. Как мы выяснили, дело-то не в этом. Дело в том, что ты даже не понимаешь, что ты делаешь и как что работает на низком уровне.
Скорее всего мои скромные познания от нехватки опыта спутаны и не систематизированы. Нет у меня знакомых программистов, которые бы внесли небольшие корректировки. А на форумах когда что-то спрашиваю, то получаю либо обрывки фраз, что наваливает ещё больше поиска и разной информации, что вносит ещё больше путаницы, так как я не знаю, что мне нужно для решения данной проблемы, а что не нужно, либо “профессура” начинает поучительные разговоры о том как долга и как сложна жизнь программиста и как только избранный сможет постичь сию магию кода, вместо того, чтоб дать конкретные ответы. Так люди и забивают потом на свои идеи и теряют интерес к кодингу.

py.user.next
Там ничего не хранится. Функция при каждом обновлении страницы запускается заново и заново генерирует всё. Переменные при каждом обновлении страницы присваиваются также с нуля.
То есть если я запускаю сервер и отправляю первый get на него, то этот get не хранится в переменных сервера до следующего запроса к серверу? То что html стирает все содержимое переменных после обновления страницы я знаю.

py.user.next
Ты зачем вообще туда jQuery поставил? AJAX, который тебе нужен, никакого отношения к нему не имеет.
Всунул, потому что я не знаю, что конкретно нужно использовать в данном случае, а jquery вроде несложный. К тому же везде в интернете jquery всегда присутствует во всех примерах, которые связаны с html.
Насколько я понял, Ajax формируется с помощью javascript..если это так, то почему нельзя Jquery?В принципе javascript тоже несложный.

Раз уж такое дело, у меня очень большой пробел в типах данных. Как я не стараюсь изучить их - что отправляю через ajax я примерно себе представляю, а вот что получает сервер я слабо понимаю и если не работает, то начинаю перебирать варианты с типом данных. Как формируется ответ сервера я представляю еще меньше, а тем более как его изменить и что туда нужно дописать,чтоб CORS не ругался. Потому вписываю все подряд и если работает - радуюсь. Если есть где-то внятное объяснение как формировать ответ домашнего сервера или ответ с какого-то стороннего хостинга (где лежит мой сайт) - было бы шикарно.

В общем…что делать-то дальше? Я все что мог и знал уже перепробовал, осталось только внимать советам

Офлайн

#6 Апрель 16, 2020 00:10:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8464
Репутация: +  759  -
Профиль   Отправить e-mail  

Javascript и flask

Dessan
То есть если я запускаю сервер и отправляю первый get на него, то этот get не хранится в переменных сервера до следующего запроса к серверу?
Не хранится. Он только тебе ответ выдал и очистился сразу, как будто тебя и не было. И это при каждом запросе происходит, даже если они полностью одинаковые.

Dessan
То что html стирает все содержимое переменных после обновления страницы я знаю.
Не html стирает, а браузер перестраивает DOM. Объектная модель документа строится из HTML-кода страницы. Но DOM можно менять и через JavaScript-скрипты, поэтому часто на сайтах в коде страницы многие поля пустые, а когда ты в браузере её открываешь, они заполнены.

Dessan
Всунул, потому что я не знаю, что конкретно нужно использовать в данном случае, а jquery вроде несложный. К тому же везде в интернете jquery всегда присутствует во всех примерах, которые связаны с html.
Он не сложный, если ты его знаешь - как минимум книжку прочитал по нему. А ты не знаешь его и добавляешь, когда он нафиг не нужен, плюс его ещё закачивать надо или хранить.
Используй XMLHttpRequest(), который есть в любом браузере.

Dessan
В принципе javascript тоже несложный.
Для тебя всё сложно, потому что ты ни одной книги не прочитал. В целом вся твоя задача не сложная, но сделать ты её не можешь, потому что ничего не знаешь и пальцем в небо тычешь всё время. Это ложное впечатление у тебя. Напиши код на JavaScript, который буквы выводит лесенкой на странице. Задачка на десять минут, у тебя на неё уйдёт неделя, так и результат будет нулевой ещё.

Dessan
Как я не стараюсь изучить их - что отправляю через ajax я примерно себе представляю
Что именно отправляется серверу, можно в браузере посмотреть. В инструментах разработчика есть вкладка Сеть. Все запросы пишутся туда.

яндекс запрос
https://yanbrowser.ru/faq/how-to-turn-on-developer-mode-in-yandex-browser

Dessan
Если есть где-то внятное объяснение как формировать ответ домашнего сервера
Сначала нужно выяснить, нужен ли тебе CORS вообще. Если CORS нужен, то настроить на своём сервере его можно без проблем. На чужом сервере может не быть такой возможности. В любом случае, если можно построить архитектуру так, чтобы в ней не было межсайтовых запросов, для которых надо CORS настраивать, нужно так и сделать. Но далеко не всегда такое прокатывает.

Поэтому и нужно выяснить сначала, в чём необходимость CORS'а. Если необходимость есть и исключить его нельзя, то нужно определить, есть ли у тебя возможность его настраивать. Если его нельзя будет настроить, то и время тогда тратить не нужно на заморочки с ним, потому что в результате ничего не получится.

Я с CORS'ом сталкивался, когда расширение для браузера писал. Расширение работало с сайтом, вклиниваясь в DOM браузера и добавляя в него элементы на просматриваемом сайте. И там было две версии сайта на разных доменах и нужно было со старой версии сайта сделать запрос ресурса на новой версии сайта. При этом никакого контроля над заголовками сервера у меня не было. Вот там мне пришлось перестраивать архитектуру расширения, потому что CORS я не мог урегулировать, так как это не мои сайты были и доступа к настройкам заголовков на сервере у меня не было.



Отредактировано py.user.next (Апрель 16, 2020 00:31:25)

Офлайн

#7 Апрель 16, 2020 00:29:21

Dessan
Зарегистрирован: 2019-10-16
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Javascript и flask

py.user.next
Не хранится. Он только тебе ответ выдал и очистился сразу, как будто тебя и не было. И это при каждом запросе происходит, даже если они полностью одинаковые.
Понял, спасибо
py.user.next
Он не сложный, если ты его знаешь - как минимум книжку прочитал по нему. А ты не знаешь его и добавляешь, когда он нафиг не нужен, плюс его ещё закачивать надо или хранить.
Используй XMLHttpRequest(), который есть в любом браузере.
Да, прочитал и закачать не так сложно, но если надо - буду использовать чистый javascript.
py.user.next
В инструментах разработчика есть вкладка Сеть. Все запросы пишутся туда
Сетью никогда не пользовался, только консолью и ресурсами, надо попробовать, спасибо.

CORS нужен и с ним нет никаких проблем после закачки python cors и команд
 from flask_cors import CORS
app = Flask(__name__)
CORS(app)


Отредактировано Dessan (Апрель 16, 2020 00:32:44)

Офлайн

#8 Апрель 16, 2020 00:40:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8464
Репутация: +  759  -
Профиль   Отправить e-mail  

Javascript и flask

Dessan
CORS нужен
Я пока что этого нигде не увидел.



Отредактировано py.user.next (Апрель 16, 2020 00:40:56)

Офлайн

#9 Апрель 16, 2020 17:30:52

Dessan
Зарегистрирован: 2019-10-16
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Javascript и flask

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 />'+'&nbsp'.repeat(i+1);    
    }
}
</script>
</body></html>

Не знаю верно ли я понял задание, но ушло примерно 5 часов, чтоб вспомнить разметку и методы js.

Отредактировано Dessan (Апрель 16, 2020 17:38:50)

Офлайн

#10 Апрель 17, 2020 02:03:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8464
Репутация: +  759  -
Профиль   Отправить e-mail  

Javascript и flask

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 = "&nbsp;";
    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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version