python - jsonify - flask restful example
Frasco request.args vs request.form (2)
Tengo entendido que request.args
en Flask contiene los parámetros codificados de URL de una solicitud GET
mientras que request.form
contiene datos POST
. Lo que me cuesta entender es por qué al enviar una solicitud POST
, al intentar acceder a los datos con request.form
un error 400
pero cuando intento acceder a ella con request.args
parece funcionar bien.
He intentado enviar la solicitud con Postman
y curl
y los resultados son idénticos.
curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"
Código:
@app.route(''/testpoint'', methods = [''POST''])
def testpoint():
name = request.args.get(''name'', '''')
return jsonify(name = name)
Sus datos json en curl son incorrectos, por lo que Flask no analiza los datos para formar.
Enviar datos como este: ''{"name":"Joe"}''
curl -X POST -d ''{"name":"Joe"}'' http://example.com:8080/testpoint --header "Content-Type:application/json"
Usted está publicando JSON, ni request.args
ni request.form
funcionarán.
request.form
solo funciona si publica datos con los tipos de contenido correctos ; los datos de formulario se POSTED con la application/x-www-form-urlencoded
o multipart/form-data
encodings.
Cuando usa application/json
, ya no está POSTING datos de formulario. Use request.get_json()
para acceder a los datos JSON POST en su lugar:
@app.route(''/testpoint'', methods = [''POST''])
def testpoint():
name = request.get_json().get(''name'', '''')
return jsonify(name = name)
Como indica, request.args
solo contiene valores incluidos en la cadena de consulta de solicitud, ¿la parte opcional de una URL después de ?
signo de interrogación. Como es parte de la URL, es independiente del cuerpo de la solicitud POST.