django rest-framework api 和 unicode 字符

Apo*_*los 5 django unicode rest json

我正在使用 django-rest-framework 为我的应用程序创建一个 api。我的应用程序使用希腊字母作为其模型的值。我已经创建了我的视图集并使用了 UnicodeJSONRenderer 来返回 json 结果。

class ChapterViewSet(viewsets.ModelViewSet):
    queryset = Chapter.objects.all()
    serializer_class = ChapterSerializer
    renderer_classes = (UnicodeJSONRenderer, )
Run Code Online (Sandbox Code Playgroud)

返回了 Json,但浏览器无法识别希腊字母(“??????????·)。在 chrome 的开发控制台上,虽然在网络选项卡上,响应的预览正常显示希腊字母。我该如何制作我的浏览器能识别希腊字母吗?

e18*_*18r 5

这是浏览器的问题。

UTF-8JSON 内容的默认编码;Django Rest Framework 正在将您的 JSON 正确编码为 UTF-8,但您的浏览器未正确显示它。

如果charset=utf-8在 Content-Type HTTP 标头中提供了,浏览器将正确显示它。但是,规范定义了另一种确定 encoding 的方法,因此不应使用此方法。Django Rest Framework 通过不包含它来尊重这一点。

Chrome 对此有一个公开的票证,但不幸的是似乎没有人关心。其他浏览器似乎也有同样的问题。另请参阅此 SO 问题


msa*_*aad 0

对我来说修复了什么(因为 pt-BR 我需要重音)

转到您的 settings.py 并包含

REST_FRAMEWORK = {
    #this bit makes the magic.
    'DEFAULT_RENDERER_CLASSES': (
         #UnicodeJSONRenderer has an ensure_ascii = False attribute,
         #thus it will not escape characters.
        'rest_framework.renderers.UnicodeJSONRenderer',
         #You only need to keep this one if you're using the browsable API
        'rest_framework.renderers.BrowsableAPIRenderer',
    )
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,您将不需要在您拥有的每个视图上包含序列化器 renderer_classes。

希望它也能解决你的问题!