Найти - Пользователи
Полная версия: Javascript и flask
Начало » Web » Javascript и flask
1 2 3
Dessan
Добрый день,

Поднял сервер flask (waitress), создал файл flserv.py, папки static и templates, в templates положил страницу index.html, в static положил картинки, style.css, jquery-3.4.1.js (это чтоб не нужно было c интернета подгружать его), main.js - файл со всеми моими скриптами. Сервер с waitress успешно запускается, отображает страницу, картинки, стили, но ни один js не отрабатывает. Даже просто создал кнопку при нажатии которой вылетает alert и даже это не работает. Все пути прописал и много раз уже менял, пробовал все варианты, читал stackoverflow…но не работает. Почему?
py.user.next
Dessan
Даже просто создал кнопку при нажатии которой вылетает alert и даже это не работает.
Начни со страницы.
Прямо в неё встрой alert() без подгрузки js-файла.
Если не срабатывает, используй не alert(), а изменение цвета фона
 <script>document.body.style.backgroundColor = "red";</script>
Если сработало, то открой исходник страницы в браузере и там перейди по ссылке на скрипт main.js, чтобы он тоже в браузере открылся.
Если открывается, то сделай тестовый скрипт test.js
 document.body.style.backgroundColor = "red";
и подключи его в шаблон как файл.
Dessan
Надо было мне вообще начать с чтения ошибок консоли, а не с поиска в интернете. Консоль ругалась на знак “$”. Как раз убрал весь jquery и чистый javascript отрабатывает отлично с подгрузкой js - файла. Как мне подключить jquery?

Спасибо за ответ!
Dessan
Нашёл проблему…надо было ссылку на скаченный jquery поместить над ссылку исполнительно скрипта main.js и все стало работать.
Dessan
Новая трудность.

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

 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)

 <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.
py.user.next
Сделай шаблон без скрипта. Выведи пароль просто в шаблоне через {{password}}.
Dessan
В том то и дело, что не выводится, ошибок не выдает. Я с одного компа на другой компьютер, где установлен сервер, отсылаю get запрос. И вот на тот комп с которого отправляю get запрос возвращается все содержимое страницы и там -то видно, что содержимое password вставлено в нужный тег, а на стороне сервера просто ничего нет.
py.user.next
Dessan
И вот на тот комп с которого отправляю get запрос возвращается все содержимое страницы и там -то видно, что содержимое password вставлено в нужный тег
То есть страница выводится с паролем?

Dessan
а на стороне сервера просто ничего нет
На какой стороне сервера? Что имеется в виду?
Dessan
Я не знаю как ещё объяснить. Есть компьютер 1 и на нём стоит сервер питона с flask, waitress и html страницей. У сервера адрес 192.168.0.103:5000. Есть компьютер 2, который находится в локальной сети с компьютером 1 через роутер. С компьютера 2 отправляем get запрос
 Get http://192.168.0.103:5000/?username=py.user&password=12345
на сервер компьютера 1 и в response на компьютере 2 видим содержимое страницы сервера вместе с вставленными значениями username и password в нудных html тегах, а на компьютере 1 (сервере) мы не видим вставленные на странице html в нужных местах тегов username и password, хотя в консоле сервера компьютера 1 видим полностью наш запрос, а в html страницу сервера ничего не приходит. Понятней я уже не смогу объяснить. И вот я хочу узнать как мне это исправить
py.user.next
Dessan
и в response на компьютере 2 видим содержимое страницы сервера вместе с вставленными значениями username и password в нудных html тегах
Если бы оно не сработало, ты бы ничего не увидел на компьютере, пославшем запрос.

Dessan
а на компьютере 1 (сервере) мы не видим вставленные на странице html в нужных местах тегов username и password
Так а где ты их смотришь?

Dessan
хотя в консоле сервера компьютера 1 видим полностью наш запрос, а в html страницу сервера ничего не приходит
В какую html-страницу, где она у тебя открыта?

Всё срабатывает. Просто ты не понимаешь, что страница генерируется каждый раз при каждом запросе от каждого клиента. Ты даже на одном клиенте при каждом запросе от него по одному и тому же адресу получаешь заново сгенерированную страницу. Можешь даже время проставлять в странице, чтобы понять это опытным путём. И естественно, даже один клиент сам себе не может ничего передать между своими же страницами, потому что они всегда заново сгенерированы, даже если они выглядят вообще идентично.

Нет хранящейся страницы, html-шаблон только хранит информацию о том, как Flask'у сгенерировать страницу. Flask через себя пропускает текст шаблона и переданную в запросе информацию, склеивает это всё воедино и получает новый текст с подставленными значениями, который затем выдаёт в ответе клиенту. А клиент получает этот сгенерированный текст и думает, что ему страницу определённую выдали, которую он запрашивал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB