视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据库数据转换成JSON格式实例详解
2020-11-27 14:23:38 责编:小采
文档


最近打算搞一个自动化运维平台,所以在看Django的知识。

在实际项目开发中,遇到一个小问题:前后端发生数据交互主流采用的是JSON。前端传数据到服务器端比较简单,稍微麻烦的是服务器端传JSON到前端。

首先数据是从数据库中获取的,Django默认使用的是ORM技术,但是作为一个运维人员,我其实比较反感这类抽象出来的API。因为尽管它对于开发人员来说,将数据库的表抽象成了一个对象,便于开发,不需要写SQL语句,但是这也是后期程序造成性能瓶颈的罪魁祸首(再做一次故障处理时,遇到一条70几行的SQL语句。。。),另外对于一个运维人员来说,纯SQL是基本能力,再次去学习ORM的语法,无形中又增加了学习成本。

不管怎么说,这次的主题是将从数据库获取数据转换成JSON,下面会将用ORM和SQL两种方式都拿出来分享。

1.采用Django Model层,ORM技术 转换成JSON格式

1 def getdata(request):2 # 使用ORM3 # all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型4 data = models.VM.objects.values('id', 'ip', 'host', 'username')5 data = serializers.serialize("json", tomcats)6 return JsonResponse(list(data), safe=False)

2.完全弃用Django Model层,纯SQL 转换成JSON格式

1 def getdata(request):2 # 使用SQL3 with connection.cursor() as cursor:4 cursor.execute('select id, machine, tomcathome, ipaddress, description from tomcatData')5 data = dictfetchall(cursor)6 return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})

JsonResponse 对象:

class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None,**kwargs)

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

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

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

3.json_dumps_params参数是一个字典,它将调用json.dumps()方法并将字典中的参数传入给该方法。

通过以上的解释,上面两个方法的JsonResponse()里面传入的参数就很清晰明了。

这样数据就会以JSON格式传入到前端,前端就能用AJAX获取到,并进行处理或者展示了。

下载本文
显示全文
专题