Flask 앱으로 데이터를 보낼 수 있기를 원합니다. 액세스를 시도 request.data
했지만 빈 문자열입니다. 요청 데이터에 어떻게 액세스합니까?
from flask import request
@app.route('/', methods=['GET', 'POST'])
def parse_request():
data = request.data # data is empty
# need posted data here
이 질문에 대한 답변으로 Content-Type 헤더에 관계없이 Python Flask에서 원시 POST 본문 가져 오기를 요청했습니다. 이는 구문 분석 된 데이터가 아닌 원시 데이터를 얻는 것입니다.
답변
문서는 요청에 속성을 사용할 수 설명합니다. 대부분의 경우 request.data
폴백으로 사용되므로 비어 있습니다.
request.data
Flask가 처리하지 못하는 mimetype과 함께 제공된 경우 수신 요청 데이터를 문자열로 포함합니다.
request.args
: URL 쿼리 문자열의 키 / 값 쌍request.form
: 본문에서 HTML 게시물 양식 또는 JSON으로 인코딩되지 않은 JavaScript 요청의 키 / 값 쌍request.files
: Flask와 구분되는 본문의 파일form
. HTML 양식을 사용해야enctype=multipart/form-data
하거나 파일이 업로드되지 않습니다.request.values
: 결합args
및form
,args
키가 겹치는 경우 선호request.json
: 파싱 된 JSON 데이터. 요청에application/json
컨텐츠 유형이 있거나 컨텐츠 유형request.get_json(force=True)
을 무시하는 데 사용해야 합니다.
이들은 모두 MultiDict
인스턴스입니다 (제외 json
). 다음을 사용하여 값에 액세스 할 수 있습니다.
request.form['name']
: 키가 있음을 알고 있으면 인덱싱을 사용하십시오.request.form.get('name')
:get
키가 없을 경우 사용request.form.getlist('name')
:getlist
키를 여러 번 보내고 값 목록을 원하는 경우 사용하십시오.get
첫 번째 값만 반환합니다.
답변
원시 데이터를 얻으려면을 사용하십시오 request.data
. 양식 데이터로 구문 분석 할 수없는 경우에만 작동합니다. 그렇지 않으면 비어 있으며 request.form
구문 분석 된 데이터가 있습니다.
from flask import request
request.data
답변
URL 쿼리 매개 변수에는을 사용하십시오 request.args
.
search = request.args.get("search")
page = request.args.get("page")
게시 된 양식 입력에는을 사용하십시오 request.form
.
email = request.form.get('email')
password = request.form.get('password')
컨텐츠 유형으로 게시 된 JSON의 경우을 application/json
사용하십시오 request.get_json()
.
data = request.get_json()
답변
다음은 게시 된 JSON 데이터를 구문 분석하고 다시 에코하는 예입니다.
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/foo', methods=['POST'])
def foo():
data = request.json
return jsonify(data)
curl로 JSON을 게시하려면 :
curl -i -H "Content-Type: application/json" -X POST -d '{"userId":"1", "username": "fizz bizz"}' http://localhost:5000/foo
또는 우편 배달부를 사용하려면
답변
콘텐츠 유형으로 JSON을 게시 할 경우 application/json
, 사용 request.get_json()
플라스크에 그것을 얻을 수 있습니다. 내용 유형이 올바르지 않으면 None
이 반환됩니다. 데이터가 JSON이 아닌 경우 오류가 발생합니다.
@app.route("/something", methods=["POST"])
def do_something():
data = request.get_json()
답변
컨텐츠 유형에 관계없이 원시 게시물 본문을 가져 오려면을 사용하십시오 request.get_data()
. 을 사용 request.data
하면을 호출 request.get_data(parse_form_data=True)
하여를 채우고 request.form
MultiDict
비워 data
둡니다.
답변
request.form
일반 사전으로 가져 오려면 을 사용하십시오 request.form.to_dict(flat=False)
.
API에 대한 JSON 데이터를 반환하려면 jsonify
.
이 예에서는 양식 데이터를 JSON 데이터로 반환합니다.
@app.route('/form_to_json', methods=['POST'])
def form_to_json():
data = request.form.to_dict(flat=False)
return jsonify(data)
다음은 curl로 POST 형식 데이터를 JSON으로 반환하는 예입니다.
$ curl http://127.0.0.1:5000/data -d "name=ivanleoncz&role=Software Developer"
{
"name": "ivanleoncz",
"role": "Software Developer"
}