VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • flask中使用jsonify和json.dumps的区别

flask提供了jsonify函数供用户处理返回的序列化json数据,而python自带的json库中也有dumps方法可以序列化json对象,那么在flask的视图函数中return它们会有什么不同之处呢?

想必开始很多人和我一样搞不清楚,只知道既然框架提供了方法就用,肯定不会错。

但作为开发人员,我们需要弄清楚开发过程中各种实现方式的特点和区别,这样在我们面对不同的需求时才能做出相对合理的选择,而不是千篇一律地使用自己熟悉的。下面我就jsonify和json.dumps的区别这一问题简单探讨一下。

 

一、实验

python的flask框架为用户提供了直接返回包含json格式数据响应的方法,即jsonify,在开发中会经常用到。如下一段简单的flask后端代码,服务端视图函数根据请求参数返回json格式的数据到客户端。

1
2
3
4
5
6
7
8
9
from flask import Flask
from flask import jsonify
from flask import Response
app = Flask(__name__)
@app.route('/hello/<name>/<words>',methods=['GET'])
def hello(name,words):
  return jsonify({'name':name,'words':words})#也可以传入key=value形式的参数,如jsonify(name=name,words=words)
if __name__ == '__main__':
  app.run()

用chrome浏览器访问页面, 可以打开控制台看到Content-Type: application/json

 

 

现在我们改为使用python自带的json库json.dumps作为视图函数的直接返回值,代码如下:

1
2
3
4
5
6
7
8
9
from flask import Flask
from flask import jsonify
from flask import Response
app = Flask(__name__)
@app.route('/hello/<name>/<words>',methods=['GET'])
def hello(name,words):
  return json.dumps({'name':name,'words':words})
if __name__ == '__main__':
  app.run()

PS: 直接返回json.dumps的结果是可行的,因为flask会判断并使用make_response方法自动构造出响应,只不过响应头各个字段是默认的。若要自定义响应字段,则可以使用make_response或Response自行构造响应。

用chrome浏览器访问页面, 可以打开控制台看到Content-Type: text/html;charset=utf-8

 

二、分析

1.Content-Type有区别

jsonify的作用实际上就是将我们传入的json形式数据序列化成为json字符串,作为响应的body,并且设置响应的Content-Type为application/json,构造出响应返回至客户端。jsonify的部分源码如下:

1
2
3
4
def jsonify(*args, **kwargs):
  if __debug__:
    _assert_have_json()
    return current_app.response_class(json.dumps(dict(*args, **kwargs),indent=None if request.is_xhr else 2), mimetype='application/json')

相关教程