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)
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
키워드 인수를 에 전달하면 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.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
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.files
summary 함수는 다음과 같습니다.
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 양식에 입력된 파일 이름을 입력합니다.
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으로 됩니다.int
HTTP の 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
'sourcecode' 카테고리의 다른 글
모든 JavaScript 오류를 포착하여 서버로 전송 (0) | 2022.11.16 |
---|---|
MySQL 테이블을 변경하여 열에 주석을 추가합니다. (0) | 2022.11.16 |
Android 5.0 - Recycleer View에 머리글/바닥글 추가 (0) | 2022.11.07 |
Python Anaconda - 안전하게 제거하는 방법 (0) | 2022.11.07 |
쿼리별 MySQL 덤프 (0) | 2022.11.07 |