TLDR : Разницы нет.
Базовый пример:
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()
Запрос и ответ на оба вопроса /getuser_dict
и /getuser_jsonify
одинаковы ( нерелевантные части не указаны ):
> POST /getuser_dict HTTP/1.1
> 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
Возвращение dict
только внутренне проверяет, какой тип объекта вы возвращаете, это string
,tuple
, BaseResponse
или dict
. Когда он определяет, что вы действительно возвращаете dict
с помощью isinstance(rv, dict)
, он вызывает jsonify(rv)
для вашего dict
объекта и возвращает.
Пожалуйста, взгляните на make_response метод app.py
. Часть, в которой он проверяет, является ли это объектом dict , также находится там.