开发者社区> 汪凡640> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于Django中JsonResponse返回中文字典编码错误的解决方案

简介: 解决方案:JsonResponse(data, json_dumps_params={'ensure_ascii':False}) ! data是需要渲染的字典 def master(request): data = {'这是':'主页'} return JsonResponse...
+关注继续查看

解决方案:JsonResponse(data, json_dumps_params={'ensure_ascii':False})

! data是需要渲染的字典

def master(request):
    data = {'这是':'主页'}
    return  JsonResponse(data, json_dumps_params={'ensure_ascii':False})

 显示效果: 

首先我们看JsonResponse()的源码:

class JsonResponse(HttpResponse): 

  def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
    json_dumps_params=None, **kwargs):

    if safe and not isinstance(data, dict):
      raise TypeError(
      'In order to allow non-dict objects to be serialized set the '
      'safe parameter to False.'
      )
    if json_dumps_params is None:
      json_dumps_params = {}
    kwargs.setdefault('content_type', 'application/json')
     data = json.dumps(data, cls=encoder, **json_dumps_params)
     super(JsonResponse, self).__init__(content=data, **kwargs)

 这里我们从根源开始找它编码错误的原因:

JsonResponse()在初始化的时候使用了json.dumps()把字典转换成了json格式,具体方法如下:

data = json.dumps(data, cls=encoder, **json_dumps_params)

接下来我们看看json.dumps()的源码:

def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
        allow_nan=True, cls=None, indent=None, separators=None,
        default=None, sort_keys=False, **kw):
    if (not skipkeys and ensure_ascii and
        check_circular and allow_nan and
        cls is None and indent is None and separators is None and
        default is None and not sort_keys and not kw):
        return _default_encoder.encode(obj)
    if cls is None:
        cls = JSONEncoder
    return cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
        check_circular=check_circular, allow_nan=allow_nan,         
        indent=indent,separators=separators, default=default, 
        sort_keys=sort_keys,**kw).encode(obj)    

 源码注释原文:If ``ensure_ascii`` is false, then the return value can contain non-ASCII characters if they appear in strings contained in ``obj``. Otherwise, all such characters are escaped in JSON strings.

 也就是说ensure_ascii是false的时候,可以返回非ASCII码的值,否则就会被JSON转义。

所以含有中文的字典转json字符串时,使用 json.dumps() 方法要把ensure_ascii参数改成false,即 json.dumps(dict,ensure_ascii=False)

JsonResponse()接收参数有关键词参数,json_dumps_params=None ,用来给 json.dumps() 传参,所以 要在关键字参数后面拼个字典来传另一组关键字参数 ensure_ascii=False,即:

json_dumps_params={'ensure_ascii':False}

综上可解决使用 JsonResponse() 强制把含有中文的字典转json并返回响应,前端渲染编码错误的问题。

    

                                                                   -------  知识无价,汗水有情,如需搬运请注明出处,谢谢!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DjangoORM 操作 | 学习笔记
快速学习 DjangoORM 操作
50 0
django的orm中F对象的使用
今天不巧就用上了。 就是将数据库的字段,自增1的场景。 from django.db.models import F DeployPool.objects.filter(name=deployversion_id).
1219 0
Django中的ORM
1. 数据库的配置 Django可以配置使用sqlite3,mysql,oracle,postgresql等数据库 在一个Django项目中,默认使用的是sqlite3数据库 DATABASES = { 'default': { 'ENGINE': 'django.
949 0
Django学习(第四天:ORM&Model)
ORM,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。 Model from django.utils import timezone # Create your models here.
958 0
Django ORM模型:想说爱你不容易
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载。   使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational mapping)模型。
1162 0
这篇 感觉很实用--DJANGO ORM
Django之model F/Q以及多对多操作 http://www.cnblogs.com/ccorz/p/5882400.html model之F/Q操作 F操作,使用查询条件的值 打个比方吧,有一张表,保存着公司员工的工资,公司普涨工资,如何在model中操作,这就用到了F,首先需要导入此模块: from django.
1273 0
实用型的DJANGO ORM
比较深入一点的内容,需要用时,用心看看。 URL:   https://www.sitepoint.com/doing-more-with-your-django-models/ https://www.
1012 0
作DJANGO ORM时的一些最佳实践
还是国外的正规,都在作DJANGO ORM的解藕化工作了。 外键不用,多对多,一对多,不用。   参考URL: http://scottlobdell.me/2015/01/sql-database-best-practices-django-orm/ ==========这个网站有很多D...
994 0
【转】建立一个更高级别的查询 API:正确使用Django ORM 的方式
这个就比较深入啦。。。 http://www.oschina.net/translate/higher-level-query-api-django-orm 结论: 在视图和其他高级应用中使用源生的ORM查询代码不是很好的主意。
820 0
+关注
汪凡640
python初高级,python web,爬虫,分布式爬虫,数据分析,数据挖掘
143
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载