Задать вопрос

Как получить JSON в FLASK?

У меня есть форма:
<form method="POST" id="form__videos">
            <div class="inputs">
                {{ form.hidden_tag()}}
                {{form.name}}
                {{form.name}}
            </div>
            <button type="button" class="btn btn__main btn__add add_video">Add Video</button>
            <button type="submit" class="btn btn__main btn__send__video">Start Merge</button>
        </form>


пытаюсь передать данные таким образом:
btnSendVideo.addEventListener('click',(e) =>{
    let links = []
    e.preventDefault()
    let formData = new FormData(videoForm)
    formData.delete("csrf_token")
    for(let [name, value] of formData){
        links.push(value)
    }
    let data = JSON.stringify({"link": links})
    let response = fetch("http://127.0.0.1:5000/res", {
        method: "POST",
        mode: "no-cors",
        headers: {
            'accept' : 'application/json',
            "Content-Type": "application/json"
        },
        body: data
    })
})


Но я совершенно не понимаю как принять данные в 127.0.0.1:5000/res
  • Вопрос задан
  • 1500 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 3
@aest0
@app.route('/res',  methods=['POST'])
def post_res():
    # Возвращает содержимое объекта links типом dict, либо, при отсутствии объекта возвращает None
    links_data = request.json.get('link', None) 

    return jsonify(links=links_data)
Ответ написан
drygdryg
@drygdryg
Python-разработчик
Создайте маршрут, который будет принимать POST-запросы и ожидать тело запроса в формате JSON. Например, так:
from flask import Flask, request

app = Flask(__name__)

...

@app.route('/res', methods=['POST'])
def res():
    form_data = request.get_json()
    ...
    return {'status': 'ok', 'error': False}
Ответ написан
@kkid404 Автор вопроса
Проблема была на стороне js, он почему-то забил на передаваемые заголовки, проблему удалось решить переписав fetch на ajax:
btnSendVideo.addEventListener('click',(e) =>{
    let links = []
    e.preventDefault()
    let formData = new FormData(videoForm)
    formData.delete("csrf_token")
    for(let [name, value] of formData){
        links.push(value)
    }
    let data = JSON.stringify({"link": links})
    let response = $.ajax({
        method: 'POST',
        url: "http://127.0.0.1:8080/video",
        data: data,
        headers:{ "Content-Type": "application/json"}
      })
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы