django-将数据库数据转换成JSON格式(ORM和SQL两种情况)最近打算搞⼀个⾃动化运维平台,所以在看Django的知识。
在实际项⽬开发中,遇到⼀个⼩问题:前后端发⽣数据交互主流采⽤的是JSON。前端传数据到服务器端⽐较简单,稍微⿇烦的是服务器端传JSON到前端。
⾸先数据是从数据库中获取的,Django默认使⽤的是ORM技术,但是作为⼀个运维⼈员,我其实⽐较反感这类抽象出来的API。因为尽管它对于开发⼈员来说,将数据库的表抽象成了⼀个对象,便于开发,不需要写SQL语句,但是这也是后期程序造成性能瓶颈的罪魁祸⾸(再做⼀次故障处理时,遇到⼀条70⼏⾏的SQL语句。。。。。),另外对于⼀个运维⼈员来说,纯SQL是基本能⼒,再次去学习ORM的语法,⽆形中⼜增加了学习成本。
不管怎么说,这次的主题是将从数据库获取数据转换成JSON,下⾯会将⽤ORM和SQL两种⽅式都拿出来分享。
1.采⽤Django Model层,ORM技术转换成JSON格式
1def getdata(request):
2# 使⽤ORM
3# all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型
4 data = models.VM.objects.values('id', 'ip', 'host', 'username')
5 data = serializers.serialize("json", tomcats)
6return JsonResponse(list(data), safe=False)
2.完全弃⽤Django Model层,纯SQL 转换成JSON格式
1def getdata(request):
2# 使⽤SQL
3 with connection.cursor() as cursor:
4 ute('select id, machine, tomcathome, ipaddress, description from tomcatData')
5 data = dictfetchall(cursor)
6return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
1# 将返回结果转换成字典
2def dictfetchall(cursor):
django前端模板3"Return all rows from a cursor as a dict"
4 columns = [col[0] for col in cursor.description]
5return [
6 dict(zip(columns, row))
7for row in cursor.fetchall()
8 ]
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获取到,并进⾏处理或者展⽰了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论