Найти - Пользователи
Полная версия: Flask. Ошибка вызова файла в js
Начало » GUI » Flask. Ошибка вызова файла в js
1
ioprst
Есть группа файлов:
index.html
page1.html
page1.js
page1.svg
page2.html
page2.js
page2.svg

pageN.html
pageN.js
pageN.svg
Храню все файлы в папке templates

В .js файлах есть вызов файла, который в определенном месте читает данные и возвращает json:
 var xhr = new XMLHttpRequest();
...
function setPost() {
    xhr.open("POST", '/home/ioprst/work/app/tmp/get_data.py', true)
    ...
}
Вызов этого файла осуществляется много, много раз (setInterval(setPost, 100))

Написал на Flask следующее:
 from flask import Flask
from flask import render_template
from flask import send_file
 
app = Flask(__name__)
 
@app.route("/")
def index():
    return send_file('templates/index.html')
 
@app.route("/<fname>", methods=['GET'])
def page(fname):
    return send_file('templates/' + fname)
 
if __name__ == "__main__":
    app.run(host='0.0.0.0')

html, svg, js Flask вроде бы возвращает без проблема (200).
Но когда в js код доходит до вызова скрипта py, в консоль вылетает ошибка:
“POST /home/ioprst/work/app/tmp/get_data.py HTTP/1.1” 404 -
Хотя файл по указанному пути существует, проверил.

Подскажите, пожалуйста, в чем может быть проблема.

(Случайно не в тот раздел залил)
ZerG
может потому что шлете ГЕТ а файл вызывает ПОСТ?
И почему бы просто не написать функцию в самом фласке и отказался от дергания файлов js ?
ioprst
ZerG, не совсем. Просто не описал для Flask как обработать запрос js.
Решено:
 xhr.open("POST", '/get-data', true)
 from get_data import get_data
 
@app.route('/get-data', methods=['POST'])
def get():
    data = request.get_data().decode('utf-8')
    return get_data(data)
ZerG
Все же заинтриговали
И почему бы просто не написать функцию в самом фласке и отказался от дергания файлов js ?

Почему такая структура? Чисто из любопытства.
ioprst
ZerG,
1) JS управляет простой анимацией SVG (на мой взгляд там это довольно удобно через Element.setAttribute(), get…).
2) JS каждый раз разный (генерируется) => менять каждый раз метод фласка совсем не подходит.
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