Отправка POST-данных через Flask

#javascript #python #html #flask

#javascript #python #HTML #flask

Вопрос:

Я пытаюсь создать какой-нибудь javascript, который запускает функцию для обновления значения ввода формы с помощью достаточно большого словаря json, а затем я хочу получить доступ к нему в моем бэкэнде flask. Итак, у меня есть следующие HTML и javascript:

 <head>
<!--some info here -->
<script>
        function AddPostData() {
            var data = editor.getValue();
            //this editor.getValue() gets the json string and it is working 
            //as validated by an alert message

            var formInfo = document.forms['json_form'];
            formInfo.elements["json_data"].value = data;
            alert(data)
        }
    </script>
  </head>
  <body>

    <!-- I have the json editing GUI here -->

    <form id="json_form" method="POST" action="/test">
        <input type="hidden" name="json_data" value="" />
        <input type="submit" value="Submit" onclick="AddPostData();">
    </form>
  

И затем вот python, который у меня есть для Flask.

 @app.route('/test', methods=['GET', 'POST'])
def test():
    if request.method == 'POST':
        print (request.data)
        the_json=request.data
        #this template simply prints it out and all that I get is b"
        return render_template('testing.html', the_json=the_json)
  

Есть идеи, что происходит не так? Когда я жестко кодирую строку в переменной data, я по-прежнему ничего не получаю в запросе.поле данных. Ну, если быть точным, я получаю b, за которым следует одна цитата: b»

Я полагаю, что это что-то неправильное в том, что на самом деле json не помещается в поле значения входных данных.

Ответ №1:

 the_json = request.form.get('json_data', None)
  

вместо

  the_json=request.data
  

будет работать в жестко закодированном разделе (наверняка, но я не слишком уверен, работает ли ваш Java script / не моя область знаний, но выглядит нормально.).

Комментарии:

1. Ха, я подумал, что что-то не так с javascript, но на самом деле проблема была в этом.

Ответ №2:

Зависит от Content-Type В случае

 Content-Type: application/json
  

вы можете использовать

 request.get_json()
  

и в случае

 Content-Type: application/x-www-form-urlencoded (like what you wanted to do)
  

вы можете использовать

 # to get all the items
dict(request.form.items())
# to specific item from post data
request.form.get("json_data")