sourcecode

Flask 뷰에서 JSON 응답 반환

copyscript 2022. 11. 16. 21:19
반응형

Flask 뷰에서 JSON 응답 반환

저는 팬더와 CSV 파일을 분석하여 요약 정보가 포함된 dict를 생성하는 기능을 가지고 있습니다.플라스크 뷰의 응답으로 결과를 반환하고 싶습니다.JSON 응답을 반환하려면 어떻게 해야 합니까?

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

Flask 1.1.0에서 뷰는 Python dict를 직접 반환할 수 있으며 Flask는 자동으로 호출됩니다.

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

Flask 버전이 1.1.0보다 작거나 다른 JSON 직렬화 가능 개체를 반환하려면 를 Import하여 사용합니다.

from flask import jsonify

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

jsonifyJSON에 전달한 데이터를 시리얼화합니다.데이터를 직접 시리얼화하려면 어떻게 해야 합니까?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

키워드 인수를 에 전달하면 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
}

이미 딕트가 있는 경우 직접 전달할 수 있습니다.jsonify(d).

사용하기 싫으면jsonify어떤 이유로든 수동으로 할 수 있습니다.불러flask.json.dumpsJSON 데이터를 생성한 후 응답을 반환합니다.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

flask.json빌트인과는 구별됩니다.json모듈.고속으로 사용하다simplejson모듈(사용 가능한 경우) 및 플라스크 앱과의 다양한 통합이 가능합니다.

JSON 응답을 반환하고 사용할 수 있는 상태 코드를 설정하려면make_response:

from flask import jsonify, make_response

@app.route('/summary')
def summary():
    d = make_summary()
    return make_response(jsonify(d), 200)

플라스크 발행 트래커의 코멘트에서 얻은 영감.

버전 1.1.0 플라스크에서는 뷰가 dict를 반환하면 JSON 응답으로 변환됩니다.

@app.route("/users", methods=['GET'])
def get_user():
    return {
        "user": "John Doe",
    }

사용자가 업로드한 파일을 분석하려면 Flask quickstart에 사용자로부터 파일을 가져와 액세스하는 방법이 나와 있습니다.파일 가져오기request.filessummary 함수는 다음과 같습니다.

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.filesHTML 양식에 입력된 파일 이름을 입력합니다.

Flask 1.1.x는 호출 없이 JSON dict를 반환할 수 있습니다.jsonify딕트 이외의 것을 반환하려면 , 그래도 전화할 필요가 있습니다.jsonify.

@app.route("/")
def index():
    return {
        "api_stuff": "values",
    }

와 동등하다

@app.route("/")
def index():
    return jsonify({
        "api_stuff": "values",
    })

다음 항목을 추가한 풀 요청을 참조하십시오.https://github.com/pallets/flask/pull/3111

나는 데코레이터를 사용하여 결과를 반환한다.jsonfiy. 뷰에 여러 개의 반환이 있을 때 더 읽기 쉽다고 생각합니다.이것은 다음과 같은 태플을 반환하는 것을 지원하지 않습니다.content, status단, 에러 상태를 반환하는 처리를 합니다.app.errorhandler대신.

import functools
from flask import jsonify

def return_json(f):
    @functools.wraps(f)
    def inner(**kwargs):
        return jsonify(f(**kwargs))

    return inner

@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 'none 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)

플라스크 1.1은 JSON으로 되어 있습니다. 만약 '만약에'가make_summary()이 반환됩니다.반환할 수 .

from flask import Flask

app = Flask(__name__)

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

상태 코드 포함을 묻는 SO가 이번 SO와 중복되어 닫혔습니다.이 질문에 답하려면 폼의 태플을 반환하여 상태 코드를 포함할 수 있습니다.(dict, int) . 。dict및 JSON으로 됩니다.intHTTP の http http http http http http 。상태 200200달러201번으로 하다

from flask import Flask

app = Flask(__name__)

@app.route('/summary')
def summary():
    d = make_summary()
    return d, 201  # 200 is the default

다음을 사용하여 상태 코드를 확인할 수 있습니다.

curl --request GET "http://127.0.0.1:5000/summary" -w "\ncode: %{http_code}\n\n"

Flask의 클래스 기반 뷰를 사용해도 답은 동일합니다.

from flask import Flask, request, jsonify
from flask.views import MethodView

app = Flask(__name__)

class Summary(MethodView):
    def get(self):
        d = make_summary()
        return jsonify(d)

app.add_url_rule('/summary/', view_func=Summary.as_view('summary'))

dict일 경우 플라스크는 직접 반환할 수 있습니다(버전 1.0.2).

def summary():
    d = make_summary()
    return d, 200

하려면 , 「」를 합니다.jsonify부에서flask개체를 지정하려면 사전은 기본입니다. 을 정 본 하 렬 전 이 화 module직ary,다사니 default the gets object to됩ized j기지 ason로으적ifymodule면또한, ,, 일, 급 을 우 는 제 다 용 니 also,있수 you습사' use can할 you always files if with경,있도라는취 dealingmake_response....

저는 이런 게 좋아요.

    @app.route("/summary")
    def summary():
        responseBody = { "message": "bla bla bla", "summary": make_summary() }
        return make_response(jsonify(responseBody), 200)

언급URL : https://stackoverflow.com/questions/13081532/return-json-response-from-flask-view

반응형