카테고리 보관물: Python

Python

플라스크 요청에서 수신 한 데이터 가져 오기 request.data했지만 빈 문자열입니다. 요청

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: 결합 argsform, 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 게시


답변

콘텐츠 유형으로 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"
}