python - example - ¿Cómo obtener POSTED JSON en el matraz?
python flask get post params (4)
Esta es la forma en que lo haría y debería ser
@app.route(''/api/add_message/<uuid>'', methods=[''GET'', ''POST''])
def add_message(uuid):
content = request.get_json(silent=True)
# print(content) # Do your processing
return uuid
Con silent=True
set, la función get_json
fallará silenciosamente al intentar recuperar el cuerpo de json. De forma predeterminada, se establece en False
. Configuración de force=True
ignorará el request.headers.get(''Content-Type'') == ''application/json''
verifica que el matraz lo haga por ti. Por defecto, esto también se establece en False
. Ver documentación del matraz .
Recomiendo encarecidamente dejar force=False
y hacer que el cliente envíe el encabezado Content-Type
para hacerlo más explícito.
¡Espero que esto ayude!
Estoy tratando de construir una API simple usando Flask, en la que ahora quiero leer algunos JSON POST. Hago la publicación con la extensión PostMan Chrome , y la publicación JSON I es simplemente {"text":"lalala"}
. Intento leer el JSON usando el siguiente método:
@app.route(''/api/add_message/<uuid>'', methods=[''GET'', ''POST''])
def add_message(uuid):
content = request.json
print content
return uuid
En el navegador, devuelve correctamente el uuid que puse en el GET, pero en la consola, simplemente imprime None
(donde espero que imprima el {"text":"lalala"}
. ¿Alguien sabe cómo puedo obtenerlo? ¿El JSON publicado desde dentro del método Flask?
Esta solución funciona:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route(''/hello'', methods=[''POST''])
def hello():
return jsonify(request.json)
Para referencia, aquí hay un código completo sobre cómo enviar json desde un cliente de Python:
import requests
res = requests.post(''http://localhost:5000/api/add_message/1234'', json={"mytext":"lalala"})
if res.ok:
print res.json()
La entrada "json =" establecerá automáticamente el tipo de contenido, como se explica aquí: Publicar JSON utilizando Python Requests
Y el cliente anterior trabajará con este código del lado del servidor:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route(''/api/add_message/<uuid>'', methods=[''GET'', ''POST''])
def add_message(uuid):
content = request.json
print content[''mytext'']
return jsonify({"uuid":uuid})
if __name__ == ''__main__'':
app.run(host= ''0.0.0.0'',debug=True)
.json
establecer el tipo de contenido de application/json
en application/json
para que la propiedad .json
funcione; de lo contrario será None
. Ver la documentación de la Request
matraz :
Si el mimetype es
application/json
, contendrá los datos JSON analizados. De lo contrario, esto seráNone
.
Flask 0.10 agregó el método request.get_json()
, y debes usar ese método en lugar de la propiedad .json
. Puede indicar al método que omita el requisito de tipo de contenido estableciendo force=True
.
Tenga en cuenta que si se produce una excepción en este punto (lo que posiblemente resulte en una respuesta de 400 Solicitudes erróneas), sus datos JSON no serán válidos. De alguna manera está malformado; es posible que desee comprobarlo con un validador JSON.