Найти - Пользователи
Полная версия: Flask, request, json array
Начало » Web » Flask, request, json array
1
i.slepov
От клиента приходит JSON вида:

[
{'email': 'john@example.com', 'name': 'John Smith'},
{'email': 'thomas@example.com', 'name': 'Thomas Sendall'}
]

Как можно его обработать стандартным способом во Flask?

Смотрел методы request и MultiDict, но так и не смог найти подходящий для извлечения данных.
sander
i.slepov
request.get_json()
J.R.
.
i.slepov
sander
request.get_json()

Возвращает None.

При этом:
request.values

Возвращает:

CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('Thomas Sendall', ''), ('John Smith', '')])])


J.R. не понял тебя, мне приходит request (POST, PUT).
sander
sander
если mimetype кривой то
request.get_json(force=True)
i.slepov
sander
если mimetype кривой то
request.get_json(force=True)

То же самое: None.

Чтобы не гадать на кофейной гуще, вот тестовый пример:

app.py
#!/usr/bin/env python
from flask import Flask, request, jsonify
app = Flask(__name__)
app.debug = True
template = """
<html>
  <head>
    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
    <script>
    $(document).ready(function()
    {
      data = [{'email': 'john@example.com', 'name': 'John Smith'},
              {'email': 'thomas@example.com', 'name': 'Thomas Sendall'}];
      $('button').on('click', send_request);
      function send_request() { 
        $.ajax({
                url: '/',
                type: 'POST', 
                data: data, 
                success: function (data) {
                    $("span").html(data.message)
                }
              }); 
      };
    });
    </script>
  </head>
  <body>
    <div style="position: absolute; margin-left: 45%;">
    <button style="background-color:red; width: 15rem; height:12rem;">Big Red Button</button>
    <h1>Result: <span></span></h1>
    </div>
  </body>
</html>
"""
@app.route('/', methods=['GET'])
def hello():
    return template
@app.route('/', methods=['POST'])
def processing():
    return jsonify({'status': 'ok',
                    'message': str(request.form.keys())})
if __name__ == "__main__":
    app.run()

sander
i.slepov
так ты json и не отсылаешь, или указывай content type и делай JSON.stringify и получай данные через request.get_json(), или смотри в request.form
ayb
В запросе нужно указать contentType: “application/json; charset=utf-8” и передавать JSON.stringify(data). Тогда можно работать с request.get_json()
i.slepov
Спасибо. Работает.
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