Tengo una ruta que devuelve la respuesta al usuario en la solicitud POST . Estoy devolviendo un dict a pedido. El problema es que, en algunos casos, devolver un dictado funciona bien, pero a veces arroja un error.
¿Alguien puede explicar cuál es el tipo de retorno ideal y por qué el retorno de dict es exitoso para algunos de los casos?
@app.route('/getuser', methods = ['post'] ) def getusername(): user = request.json.get("user_name") # This works good for few cases return {"username": user} # Whereas other require this return jsonify({"username": user})TLDR : No hay diferencia.
Ejemplo básico:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/getuser_dict', methods=['POST']) def getuser_dict(): user = request.json.get("user_name") return {"username": user} @app.route('/getuser_jsonify', methods=['POST']) def getuser_jsonify(): user = request.json.get("user_name") return jsonify({"username": user}) if __name__ == '__main__': app.run() El envío de la solicitud POST y la recuperación de la respuesta de /getuser_dict y /getuser_jsonify son iguales ( partes irrelevantes omitidas):
> POST ... > Host: 127.0.0.1:5000 > User-Agent: insomnia/7.0.3 > Content-Type: application/json > Accept: */* > Content-Length: 24 | { | "user_name": "John" | } * upload completely sent off: 24 out of 24 bytes * HTTP 1.0, assume close after body < HTTP/1.0 200 OK < Content-Type: application/json < Content-Length: 20 < Server: Werkzeug/0.16.0 Python/3.6.8 < Date: Wed, 06 Nov 2019 09:34:51 GMT * Received 20 B chunk * Closing connection 65 Devolver dict internamente solo verifica qué tipo de objeto está devolviendo, si es string , tuple , BaseResponse o dict . Cuando determina que realmente devuelve dict por isinstance(rv, dict) , llama a jsonify(rv) en su objeto dict y lo devuelve.
Eche un vistazo al método make_response de app.py La parte donde verifica si es un objeto dict también está allí.