restful jsonify example python rest curl post flask

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.