¿Es posible realizar la solicitud POST en el matraz?

Es necesario realizar una solicitud POST desde el lado del servidor en Flask.

Imaginemos que tenemos:

@app.route("/test", methods=["POST"]) def test(): test = request.form["test"] return "TEST: %s" % test @app.route("/index") def index(): # Is there something_like_this method in Flask to perform the POST request? return something_like_this("/test", { "test" : "My Test Data" }) 

No he encontrado nada específico en la documentación de Flask. Algunos dicen que el urllib2.urlopen es urllib2.urlopen pero no pude combinar Flask y urlopen . ¿Es realmente posible?

¡Gracias por adelantado!

Sí, para realizar una solicitud POST puede utilizar urllib2 , consulte la documentación .

Sin embargo, recomendaría utilizar el módulo de solicitudes en su lugar.

EDITAR :

Le sugiero que refactorice su código para extraer la funcionalidad común:

 @app.route("/test", methods=["POST"]) def test(): return _test(request.form["test"]) @app.route("/index") def index(): return _test("My Test Data") def _test(argument): return "TEST: %s" % argument 

Para el registro, aquí hay un código general para realizar una solicitud POST desde Python:

 #make a POST request import requests dictToSend = {'question':'what is the answer?'} res = requests.post('http://localhost:5000/tests/endpoint', json=dictToSend) print 'response from server:',res.text dictFromServer = res.json() 

Observe que estamos pasando un dictado de Python usando la opción json= . Esto convenientemente le dice a la biblioteca de solicitudes que haga dos cosas:

  1. serializar el dictado a JSON
  2. escriba el tipo MIME correcto (‘application / json’) en el encabezado HTTP

Y aquí hay una aplicación de Flask que recibirá y responderá a esa solicitud POST:

 #handle a POST request from flask import Flask, render_template, request, url_for, jsonify app = Flask(__name__) @app.route('/tests/endpoint', methods=['POST']) def my_test_endpoint(): input_json = request.get_json(force=True) # force=True, above, is necessary if another developer # forgot to set the MIME type to 'application/json' print 'data from client:', input_json dictToReturn = {'answer':42} return jsonify(dictToReturn) if __name__ == '__main__': app.run(debug=True)