name - title of graph python




Comment obtenir les données reçues dans la requête Flask (6)

Je veux être en mesure d'envoyer les données à mon application Flask. J'ai essayé d'accéder à request.data mais c'est une chaîne vide. Comment accédez-vous aux données de demande?

@app.route('/', methods=['GET', 'POST'])
def parse_request():
    data = request.data  # data is empty
    # need posted data here

La réponse à cette question m'a amené à demander au corps POST brut dans Python Flask, quel que soit l'en-tête Content-Type suivant, qui consiste à obtenir les données brutes plutôt que les données analysées.


C'est simplement comme suit

Pour le paramètre URL Query , utilisez request.args

search = request.args.get("search")
page = request.args.get("page")

Pour l' entrée de formulaire , utilisez request.form

email = request.form.get('email')
password = request.form.get('password')

Pour le type de données application / json , utilisez request.data

# data in string format and you have to parse into dictionary
data = request.data
dataDict = json.loads(data)

Flask a un autre raccourci pour JSON:

Entête:

{Content-Type: application/json}

@app.route("/something", methods=["POST"])
def do_something():
    data = request.get_json()

Les docs décrivent les attributs disponibles dans la requête. Dans la plupart des cas, request.data sera vide car il est utilisé comme solution de secours:

request.data Contient les données de la requête entrante sous la forme d'une chaîne au cas où un type mime serait fourni par Flask.

  • request.args : les paires clé / valeur dans la chaîne de requête d'URL
  • request.form : les paires clé / valeur dans le corps, à partir d'un formulaire HTML, ou d'une requête JavaScript qui n'est pas codée en JSON
  • request.files : les fichiers dans le corps, que Flask garde séparés du form . Les formulaires HTML doivent utiliser enctype=multipart/form-data ou les fichiers ne seront pas téléchargés.
  • request.values : args et form combinés, préférant les args si les clés se chevauchent

Toutes ces instances sont MultiDict . Vous pouvez accéder aux valeurs en utilisant:

  • request.form['name'] : utilisez l'indexation si vous savez que la clé existe
  • request.form.get('name') : utilise get si la clé n'existe pas
  • request.form.getlist('name') : utilisez getlist si la clé est envoyée plusieurs fois et que vous voulez une liste de valeurs. get only renvoie la première valeur.

Pour parler simplement, vous pouvez obtenir des données de la façon suivante:

@app.before_request
def before_request():
    g.data = request.get_json() or request.values

Maintenant, g.data est une instance de werkzeug.ImmutableMultiDict . Ensuite, vous pouvez utiliser g.data qui peut gérer la plupart de vos besoins. Par exemple, vous pouvez l'utiliser comme ceci:

@app.route("/something", methods=["POST"])
def do_something():
    result = handle(g.data)
    return jsonify(data=result)

Bien sûr, vous pouvez utiliser blueprint au lieu de l' app ~~


@app.route('/', methods=['POST'])
def process_data():
    req_data = request.get_json(force=True) # force=True will make sure this works even if a client does not specify application/json
    language = req_data['language'] # or whatever key you have in your json

    return '''The language value is: {}'''.format(language)

from flask import request
request.data




flask