Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 28, 2015 10:05:09

i.slepov
Зарегистрирован: 2015-05-28
Сообщения: 53
Репутация: +  5  -
Профиль   Отправить e-mail  

Flask, request, json array

От клиента приходит JSON вида:

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

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

Смотрел методы request и MultiDict, но так и не смог найти подходящий для извлечения данных.

Офлайн

#2 Авг. 28, 2015 10:51:18

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Flask, request, json array

i.slepov
request.get_json()

Офлайн

#3 Авг. 28, 2015 10:59:40

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Flask, request, json array

.

Отредактировано J.R. (Фев. 27, 2016 16:40:23)

Офлайн

#4 Авг. 28, 2015 11:03:36

i.slepov
Зарегистрирован: 2015-05-28
Сообщения: 53
Репутация: +  5  -
Профиль   Отправить e-mail  

Flask, request, json array

sander
request.get_json()

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

При этом:
request.values

Возвращает:

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


J.R. не понял тебя, мне приходит request (POST, PUT).

Отредактировано i.slepov (Авг. 28, 2015 11:07:12)

Офлайн

#5 Авг. 28, 2015 11:42:56

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Flask, request, json array

sander
если mimetype кривой то

request.get_json(force=True)

Офлайн

#6 Авг. 28, 2015 12:02:04

i.slepov
Зарегистрирован: 2015-05-28
Сообщения: 53
Репутация: +  5  -
Профиль   Отправить e-mail  

Flask, request, json array

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()

Отредактировано i.slepov (Авг. 28, 2015 13:04:37)

Офлайн

#7 Авг. 28, 2015 13:05:10

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Flask, request, json array

i.slepov
так ты json и не отсылаешь, или указывай content type и делай JSON.stringify и получай данные через request.get_json(), или смотри в request.form

Офлайн

#8 Авг. 28, 2015 13:13:01

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Flask, request, json array

В запросе нужно указать contentType: “application/json; charset=utf-8” и передавать JSON.stringify(data). Тогда можно работать с request.get_json()

Офлайн

#9 Авг. 28, 2015 13:14:26

i.slepov
Зарегистрирован: 2015-05-28
Сообщения: 53
Репутация: +  5  -
Профиль   Отправить e-mail  

Flask, request, json array

Спасибо. Работает.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version