python测试开发django-16.JsonResponse返回中文编码问题
前言
django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码
遇到问题
接着前面的User表,测试数据如下
| user_name | psw | |
|---|---|---|
| yoyo | 123456 | 283340479@qq.com | 
| yoyo2 | 111111 | 1 | 
| yoyo5 | 111111 | 0 | 
接着上一篇【python测试开发django-15.查询结果转json(serializers)】,如果数据库里面有中文的数据,
返回的json数据中文不能正常显示如下,查询的结果中有{"user_name": "\u4e0a\u6d77-\u60a0\u60a0", "psw": "\u5bc6\u7801", "mail": "\u4e2d\u6587"}
{
	"data": [{
		"user_name": "yoyo",
		"psw": "123456",
		"mail": "283340479@qq.com"
	}, {
		"user_name": "yoyo2",
		"psw": "111111",
		"mail": "1"
	}, {
		"user_name": "yoyo5",
		"psw": "111111",
		"mail": "0"
	}, {
		"user_name": "\u4e0a\u6d77-\u60a0\u60a0",
		"psw": "\u5bc6\u7801",
		"mail": "\u4e2d\u6587"
	}]
}
解决办法
JsonResponse里面有个参数json_dumps_params,设置为json_dumps_params={'ensure_ascii':False}即可
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)  
  data: 应该传递一个标准的 python 字典给它,它将其转换成 json 格式的数据。
  encoder:默认为 django.core.serializers.json.DjangoJSONEncoder,用于序列化data。关于这个序列化的更多信息参见JSON 序列化。
  safe : 默认为True。如果设置为False,可以传递任何对象进行序列化(否则,只允许dict 实例)。如果safe 为True,而第一个参数传递的不是dict 对象,将抛出一个TypeError。
另外:它的默认 Content-Type 头部设置为application/json。
  json_dumps_params:在1.9版本中新增,可以传递一个python标准的 json 库中,json.dump() 方法处理后的对象给它,用于生成一个响应。
修改后代码(上一篇的三种方法都适用)
def json_data(request):
    '''values()获取的可迭代dict对象转list'''
    data = {}
    ret = User.objects.all().values()
    data["data"] = list(ret)
    return JsonResponse(data,
                        safe=False,
                        json_dumps_params={'ensure_ascii':False})
在urls.py配置访问地址 url(r'^json_data$', testdb.json_data,访问后得到的结果(返回的数据自己在线解析过)
{
	"data": [{
		"user_name": "yoyo",
		"psw": "123456",
		"mail": "283340479@qq.com"
	}, {
		"user_name": "yoyo2",
		"psw": "111111",
		"mail": "1"
	}, {
		"user_name": "yoyo5",
		"psw": "111111",
		"mail": "0"
	}, {
		"user_name": "上海-悠悠",
		"psw": "密码",
		"mail": "中文"
	}]
}
django交流QQ群:779429633
python测试开发django-16.JsonResponse返回中文编码问题的更多相关文章
- python测试开发django-15.查询结果转json(serializers)
		
前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...
 - 2019第一期《python测试开发》课程,10月13号开学
		
2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...
 - python测试开发django-rest-framework-63.基于函数的视图(@api_view())
		
前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...
 - python测试开发django-197.django-celery-beat 定时任务
		
前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...
 - python测试开发django-36.一对一(OneToOneField)关系查询
		
前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...
 - 《Python测试开发技术栈—巴哥职场进化记》—前言
		
写在前面 今年从4月份开始写一本讲Python测试开发技术栈的书,主要有两个目的,第一是将自己掌握的一些内容分享给大家,第二是希望自己能系统的梳理和学习Python相关的技术栈.当时我本来打算以故事体 ...
 - python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)
		
前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布 ...
 - 【python测试开发栈】python基础语法大盘点
		
周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...
 - python web开发——django学习(一)第一个连接mysql数据库django网站运行成功
		
1.新建一个项目 2.新建一些文件夹方便管理 3.新建一个项目叫message 4.连接数据库 python web开发Django连接mysql 5.在数据库里自动生成django的表 6.运行 ...
 
随机推荐
- spring-dao.xml 模板
			
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
 - 对象克隆及属性转换-JavaScript
			
在某些项目中,需要将一些返回信息进行其他语言的翻译,可以为不同语言用户提供不同的语言版本.下面是一个实现: /** * @class Translate * @description 查询字典,翻译成 ...
 - Zookeeper集群搭建以及python操作zk
			
一.Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper设计目 ...
 - 解决RabbitMQ service is already present - only up...
			
C:\Users\Administrator>rabbitmq-service install RabbitMQ service is already present - only updati ...
 - maven windows 环境变量
			
MAVEN_HOME,内容是解压的maven文件路径 Path中添加 %MAVEN_HOME%\bin 为了测试安装成功,打开命令提示符,输入 mvn -version
 - WebApi 接口参数详解
			
WebApi 接口参数不再困惑:传参详解 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为 ...
 - 【AtCoder】ARC098题解
			
C - Attention 枚举,计算前缀和即可 代码 #include <bits/stdc++.h> #define fi first #define se second #defin ...
 - zookeeper集群自动启动脚本
			
定义脚本boot.sh启动zookeeper集群(hadoop1,hadoop2,hadoop3) #!/bin/bash echo "start zkServer..." do ...
 - CSS------如何让ul中的li分为两列甚至多列
			
转载: http://blog.sina.com.cn/s/blog_7f13f92a0100rkfg.html 只需要复制ul和li中的style样式即可 如果需要自定义多少列,只需要修改li中的w ...
 - H5中标签Canvas实现图像动画
			
一:主题部分 1.介绍 canvas可以实现画图功能,所以只要通过js的控制,就可以实现简单的动画效果. 这里主要是两个程序,一个小球来回上下弹跳,一个是吹气球. 2.弹跳程序 <!DOCTYP ...