前言

django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码

遇到问题

接着前面的User表,测试数据如下

user_name psw mail
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返回中文编码问题的更多相关文章

  1. python测试开发django-15.查询结果转json(serializers)

    前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...

  2. 2019第一期《python测试开发》课程,10月13号开学

    2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...

  3. python测试开发django-rest-framework-63.基于函数的视图(@api_view())

    前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...

  4. python测试开发django-197.django-celery-beat 定时任务

    前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...

  5. python测试开发django-36.一对一(OneToOneField)关系查询

    前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...

  6. 《Python测试开发技术栈—巴哥职场进化记》—前言

    写在前面 今年从4月份开始写一本讲Python测试开发技术栈的书,主要有两个目的,第一是将自己掌握的一些内容分享给大家,第二是希望自己能系统的梳理和学习Python相关的技术栈.当时我本来打算以故事体 ...

  7. python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)

    前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布 ...

  8. 【python测试开发栈】python基础语法大盘点

    周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...

  9. python web开发——django学习(一)第一个连接mysql数据库django网站运行成功

    1.新建一个项目 2.新建一些文件夹方便管理 3.新建一个项目叫message  4.连接数据库 python web开发Django连接mysql 5.在数据库里自动生成django的表  6.运行 ...

随机推荐

  1. spring-dao.xml 模板

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. 对象克隆及属性转换-JavaScript

    在某些项目中,需要将一些返回信息进行其他语言的翻译,可以为不同语言用户提供不同的语言版本.下面是一个实现: /** * @class Translate * @description 查询字典,翻译成 ...

  3. Zookeeper集群搭建以及python操作zk

    一.Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper设计目 ...

  4. 解决RabbitMQ service is already present - only up...

    C:\Users\Administrator>rabbitmq-service install RabbitMQ service is already present - only updati ...

  5. maven windows 环境变量

    MAVEN_HOME,内容是解压的maven文件路径 Path中添加 %MAVEN_HOME%\bin 为了测试安装成功,打开命令提示符,输入 mvn -version

  6. WebApi 接口参数详解

    WebApi 接口参数不再困惑:传参详解   阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为 ...

  7. 【AtCoder】ARC098题解

    C - Attention 枚举,计算前缀和即可 代码 #include <bits/stdc++.h> #define fi first #define se second #defin ...

  8. zookeeper集群自动启动脚本

    定义脚本boot.sh启动zookeeper集群(hadoop1,hadoop2,hadoop3) #!/bin/bash echo "start zkServer..." do ...

  9. CSS------如何让ul中的li分为两列甚至多列

    转载: http://blog.sina.com.cn/s/blog_7f13f92a0100rkfg.html 只需要复制ul和li中的style样式即可 如果需要自定义多少列,只需要修改li中的w ...

  10. H5中标签Canvas实现图像动画

    一:主题部分 1.介绍 canvas可以实现画图功能,所以只要通过js的控制,就可以实现简单的动画效果. 这里主要是两个程序,一个小球来回上下弹跳,一个是吹气球. 2.弹跳程序 <!DOCTYP ...