python、Django、Flask返回json数据

pyhton中

在Python中我们可以采用标准库(json)进行格式转换:

1、将数据转换成josn
import json
def root():
    t = {
        'a': 1,
        'b': 2,
        'c': [3, 4, 5]
    }
    return json.dumps(t)
此时在访问时就能得到json数据

2、上面虽然正常运行了,但是对于http而言是不友好的,因为Content-Type 
中显示的是 text/html,这是因为MIME没有设置,默认值是text/html。
通常的解决办法使用Djangod的HttpResponse模块或者Flask的response模块,手动指定MIME.
import json
def root():
    t = {
        'a': 1,
        'b': 2,
        'c': [3, 4, 5]
    }
    return Response(json.dumps(t), mimetype='application/json')
    <!--return HttpResponse(json_data,content_type="application/json")-->
这样在访问时 Content-Type 就是 application/json 了

以为josn的流行,实际上flask和josn都为josn准备了专门的模块

Flask的json模块(jsonify)

from flask import jsonify
@app.route('/')
def root():
    t = {
        'a': 1,
        'b': 2,
        'c': [3, 4, 5]
    }
    return json.dumps(t)

Django的json模块(JsonResponse 对象)

这个类是HttpRespon的子类,它主要和父类的区别在于:

1.它的默认Content-Type 被设置为: application/json

2.第一个参数,data应该是一个字典类型,当 safe 这个参数被设置为:False ,那data可以填入任何能被转换为JSON格式的对象,比如list, tuple, set。 默认的safe 参数是 True. 如果你传入的data数据类型不是字典类型,那么它就会抛出 TypeError的异常。


#如果这样返回,ajax还需要进行json解析
#views.py
return HttpResponse(json.dumps({"msg":"ok!"}))

#index.html
var data=json.parse(data)
console.log(data.msg);

#如果这样返回,两边都不需要进行json的序列化与反序列化,ajax接受的直接是一个对象
#views.py
from django.http import JsonResponse
return JsonResponse({"msg":"ok!"})

#index.html
console.log(data.msg);

猜你喜欢

转载自blog.csdn.net/weixin_42750983/article/details/82431148