Django REST框架序列化器和JSONRenderer编码

2024-09-22 16:34:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用Django REST框架序列化JSON格式时遇到了一个问题。我在Django项目中使用SQLite3。当我用一个包含非ASCII字符的字符串序列化一个对象时,我会遇到一些问题。在

例如,如果我直接查询我的模型,我会得到字符串:

"Grados Centígrados"

序列化之后序列化.data是:

^{pr2}$

所以序列化程序在做什么

"Grados Centígrados".decode('UTF-8')

然后,JSONRenderer再次对“decoded”字符串进行“编码”,结果如下:

'Grados Cent\xc3\xadgrados'

我无法在浏览器中获得正确的表示。在

编辑:我使用的是Django REST framework3。我在设置文件中添加了以下内容:

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
    'rest_framework.renderers.JSONRenderer',
),
'DEFAULT_PARSER_CLASSES': (
    'rest_framework.parsers.JSONParser',
)
}

然后我创造了网址.py以及视图.py,遵循教程中的步骤:

http://www.django-rest-framework.org/tutorial/2-requests-and-responses/

我得到:“Grados CentÃ…Grados”


Tags: django字符串py框架restdefault序列化framework
3条回答

编写您自己的UTF-8渲染:

file: your_app/renders/__init__.py:

from rest_framework.renderers import JSONRenderer

class UTF8JSONRender(JSONRenderer):
    charset = 'utf-8'

在你的设置.py公司名称:

^{pr2}$

UnicodeJSONRenderer类不再存在(in version 3 of Django rest framework

默认情况下会包含它。如果要禁用它,请将以下内容粘贴到设置.py文件

REST_FRAMEWORK = { 'UNICODE_JSON': False }

使用Django REST framework3.1.1时,我不会遇到这个问题。它显示“Grados CentíGrados”,在可浏览的API中没有问题。您是否在设置中修改了REST\u框架设置?如果是的话,你能把它贴出来吗?在

{2{假设你使用的是^ 2框架,除非你使用的是^ 2框架。在3.0+中,UnicodeJSONRenderer现在被称为JSONRenderer,因此总是默认以unescapedutf-8编码方式显示字符串。在

从2.0文档中:

JSONRenderer

Renders the request data into JSON, using utf-8 encoding.

Note that non-ascii characters will be rendered using JSON's \uXXXX character escape. For example:

{"unicode black star": "\u2605"}

UnicodeJSONRenderer

Renders the request data into JSON, using utf-8 encoding.

Note that non-ascii characters will not be character escaped. For example:

{"unicode black star": "★"}

因此,您需要在您的设置中设置:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.UnicodeJSONRenderer',
    ),
}

相关问题 更多 >