Вернуть JSON ответ с видом колбу
У меня есть функция, которая анализирует CSV-файл с пандами и создает dict с суммарной информацией. Я хочу вернуть результаты в качестве ответа из представления колбы. Как я могу вернуть JSON ответ?
@app.route("/summary")
def summary():
d = make_summary()
# send it back as json
8 ответов:
передайте сводные данные в
jsonifyфункция, которая возвращает JSON ответ.from flask import jsonify @app.route('/summary') def summary(): d = make_summary() return jsonify(d)начиная с Flask 0.11, вы можете передать любой JSON-сериализуемый тип, а не только dict, как объект верхнего уровня.
jsonifyсериализует данные, которые вы передаете в JSON. Если вы хотите сериализовать данные самостоятельно, сделайте чтоjsonifyделает путем построения ответа сstatus=200иmimetype='application/json'.from flask import json @app.route('/summary') def summary(): data = make_summary() response = app.response_class( response=json.dumps(data), status=200, mimetype='application/json' ) return response
передать аргументы ключевого слова в
flask.jsonifyи они будут выводиться как объект JSON.@app.route('/_get_current_user') def get_current_user(): return jsonify( username=g.user.username, email=g.user.email, id=g.user.id ){ "username": "admin", "email": "admin@localhost", "id": 42 }
если вы хотите проанализировать файл, загруженный пользователем, колба краткое руководство показывает, как получить файлы от пользователей и получить к ним доступ. Получить файл от
request.filesи передать его в функцию.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')заменить
'data'ключrequest.filesС именем файла, введенного в вашу HTML-форму.
если вы не хотите использовать
jsonifyпо какой-то причине, вы можете сделать это вручную. Звонитеflask.json.dumpsчтобы создать данные JSON, затем верните ответ с помощью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
вы можете написать декоратор для преобразования возвращаемого значения из функции представления в 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'
перед колбой 0.11,
jsonfiyне позволяет возвращать массив напрямую. Вместо этого передайте список в качестве аргумента ключевого слова.@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)
Как сказано ранее jsonify-это лучший способ, или вы также можете использовать фляга-ответы' пакет в https://github.com/Parkayun/flask-responses
@app.route("/json") def hello(): return json_response(your_dict, status_code=201)
Comments