django-将数据库数据转换成JSON格式(ORM和SQL两种情况)
最近打算搞一个自动化运维平台,所以在看Django的知识。
在实际项目开发中,遇到一个小问题:前后端发生数据交互主流采用的是JSON。前端传数据到服务器端比较简单,稍微麻烦的是服务器端传JSON到前端。
首先数据是从数据库中获取的,Django默认使用的是ORM技术,但是作为一个运维人员,我其实比较反感这类抽象出来的API。因为尽管它对于开发人员来说,将数据库的表抽象成了一个对象,便于开发,不需要写SQL语句,但是这也是后期程序造成性能瓶颈的罪魁祸首(再做一次故障处理时,遇到一条70几行的SQL语句。。。。。),另外对于一个运维人员来说,纯SQL是基本能力,再次去学习ORM的语法,无形中又增加了学习成本。
不管怎么说,这次的主题是将从数据库获取数据转换成JSON,下面会将用ORM和SQL两种方式都拿出来分享。
1.采用Django Model层,ORM技术 转换成JSON格式
- def getdata(request):
- # 使用ORM
- # all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型
- data = models.VM.objects.values('id', 'ip', 'host', 'username')
- data = serializers.serialize("json", tomcats)
- return JsonResponse(list(data), safe=False)
2.完全弃用Django Model层,纯SQL 转换成JSON格式
- def getdata(request):
- # 使用SQL
- with connection.cursor() as cursor:
- cursor.execute('select id, machine, tomcathome, ipaddress, description from tomcatData')
- data = dictfetchall(cursor)
- return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
- # 将返回结果转换成字典
- def dictfetchall(cursor):
- "Return all rows from a cursor as a dict"
- columns = [col[0] for col in cursor.description]
- return [
- dict(zip(columns, row))
- for row in cursor.fetchall()
- ]
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获取到,并进行处理或者展示了。
django-将数据库数据转换成JSON格式(ORM和SQL两种情况)的更多相关文章
- PHP将数据库的数据转换成json格式
header('content-type:application/json;charset=utf8'); $results = array(); while ($row = mysql_f ...
- 在PHP代码中处理JSON 格式的字符串的两种方法:
总结: 在PHP代码中处理JSON 格式的字符串的两种方法: 方法一: $json= '[{"id":"1","name":"\u ...
- android实现json数据的解析和把数据转换成json格式的字符串
利用android sdk里面的 JSONObject和JSONArray把集合或者普通数据,转换成json格式的字符串 JSONObject和JSONArray解析json格式的字符串为集合或者一般 ...
- 省市县从数据库读出来的list数据转换成json格式的数据
一,数据源 1.1,数据库查出来的数据是 两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)见这个博文 ...
- 表单数据转换成json格式数据
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- php获取数据转换成json格式
<?php header("content-type:text/html;charset=utf-8"); $con=mysql_connect("localhos ...
- <form> 标签 // HTML 表单 // from 表单转换成json 格式
<form> 标签 // HTML 表单 // from 表单转换成json 格式 form 表单,对开发人员来说是在熟悉不过的了,它是页面与web服务器交互时的重要信息来源 表 ...
- 数据库记录转换成json格式 (2011-03-13 19:48:37) (转)
http://blog.sina.com.cn/s/blog_621768f30100r6v7.html 数据库记录转换成json格式 (2011-03-13 19:48:37) 转载▼ 标签: 杂谈 ...
- asp.net dataTable转换成Json格式
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
随机推荐
- [转]JAVA的动态代理机制及Spring的实现方式
JAVA 代理实现 代理的实现分动态代理和静态代理,静态代理的实现是对已经生成了的JAVA类进行封装. 动态代理则是在运行时生成了相关代理累,在JAVA中生成动态代理一般有两种方式. JDK自带实现方 ...
- 026 hibernate操作树形结构
树形结构:也就是目录结构,有父目录.子目录.文件等信息,而在程序中树形结构只是称为节点. 一棵树有一个根节点,而根节点也有一个或多个子节点,而一个子节点有且仅有一个父节点(当前除根节点外),而且也存在 ...
- [原创]LAMP+phpmyadmin+FTP环境搭建
***简单ftp服务器搭建: rpm –qa|grep vsftpd //检查是否安装服务 yum –y install vsftpd-* //安装服务 mkdir /var/ftp/uplo ...
- Win10无法连接远程桌面提示“你的凭据不工作”的三个解决方法
Win10无法连接远程桌面提示"你的凭据不工作"的三个解决方法(转藏) 解决方法一:修改组策略 1.在"开始"窗口运行gpedit.msc,进入计算机配置-&g ...
- scroll抖动问题
参考软文: http://www.cnblogs.com/coco1s/p/5499469.html function throttle(func, wait, mustRun) { var time ...
- 初入计算机图形学——BVH结构的实现
摘要: 本人水平有限,若有错误也请指正~ 光线追踪作为全局光照解决方案的一个重要思想,其与场景大量三角形的求交效率高低直接影响最终算法的速度,典型的一些渲染器都采用二叉树来将场景进行划分,最近自己实现 ...
- java中File类应用:遍历文件夹下所有文件
练习: 要求指定文件夹下的所有文件,包括子文件夹下的文件 代码: package 遍历文件夹所有文件; import java.io.File; public class Test { public ...
- Selenium WebDriver + python 自动化测试框架
目标 组内任何人都可以进行自动化测试用例的编写 完全分离测试用例和自动化测试代码,就像写手工测试用例一下,编写excel格式的测试用例,包括步骤.检查点,然后执行自动化工程,即可执行功能自动化测试用例 ...
- node.js入门系列(一)--Node.js简介
什么是NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行.对于写在HTML页面里的JS,浏览器充当了解析器的角色.而对于需要独立运行的JS,NodeJS就是一个解析器. 每一种解析器都是一 ...
- mysql之 mysql 5.6不停机双主一从搭建(活跃双主一从基于日志点复制)
环境说明:版本 version 5.6.25-log 主1库ip: 10.219.24.25主2库ip: 10.219.24.22从1库ip:10.219.24.26os 版本: centos 6.7 ...