requests - python flask json body




Resposta JSON de retorno da visualização Flask (6)

Eu tenho uma função que analisa um arquivo CSV com Pandas e produz um dict com informações de resumo. Eu quero retornar os resultados como uma resposta de uma exibição do Flask. Como faço para retornar uma resposta JSON?

@app.route("/summary")
def summary():
    d = make_summary()
    # send it back as json

Antes do Flask 0.11, o jsonfiy não permitia retornar um array diretamente. Em vez disso, passe a lista como um argumento de palavra-chave.

@app.route('/get_records')
def get_records():
    results = [
        {
          "rec_create_date": "12 Jun 2016",
          "rec_dietary_info": "nothing",
          "rec_dob": "01 Apr 1988",
          "rec_first_name": "New",
          "rec_last_name": "Guy",
        },
        {
          "rec_create_date": "1 Apr 2016",
          "rec_dietary_info": "Nut allergy",
          "rec_dob": "01 Feb 1988",
          "rec_first_name": "Old",
          "rec_last_name": "Guy",
        },
    ]
    return jsonify(results=list)

Como disse anteriormente jsonify é a melhor maneira ou você também pode usar o pacote de respostas do Flask em https://github.com/Parkayun/flask-responses

@app.route("/json")
def hello():
    return json_response(your_dict, status_code=201)

Se você não quiser usar o jsonify por algum motivo, você pode fazer o que ele faz manualmente. Chame flask.json.dumps para criar dados JSON e, em seguida, retorne uma resposta com o tipo de conteúdo application/json .

from flask import json

@app.route('/summary')
def summary():
    data = make_summary()
    response = app.response_class(
        response=json.dumps(data),
        mimetype='application/json'
    )
    return response

Se você quiser analisar um arquivo enviado pelo usuário, o início quickstart do Flask mostra como obter arquivos de usuários e acessá-los. Obtenha o arquivo de request.files e passe-o para a função de resumo.

from flask import request, jsonify
from werkzeug import secure_filename

@app.route('/summary', methods=['GET', 'POST'])
def summary():
    if request.method == 'POST':
        csv = request.files['data']
        return jsonify(
            summary=make_summary(csv),
            csv_name=secure_filename(csv.filename)
        )

    return render_template('submit_data.html')

Substitua a chave 'data' por request.files com o nome da entrada do arquivo em seu formulário HTML.


Você pode escrever um decorador para converter o valor de retorno de uma função de exibição em uma resposta JSON.

def return_json(view):
    @functools.wraps(view)
    def wrapped_view(**values):
        return jsonify(view(**values))
    return wrapped_view


@app.route('/test/<arg>')
@return_json
def test(arg):
    if arg == 'list':
        return [1, 2, 3]
    elif arg == 'dict':
        return {'a': 1, 'b': 2}
    elif arg == 'bool':
        return True
    return 'non of them'

Você pode tentar esta abordagem:

from flask import jsonify, Flask

app = Flask(__name__)

@app.route("/summary")
def summary():
    d = make_summary()
    return jsonify(d)






flask