Создание UTF-8 JsonResponse в Django

Есть ли простой способ переопределить DjangoJSONEncoder.ensure_ascii и установить его на False или вывести текст без ascii в django.http.JsonResponse любым другим способом?

Ответ 1

EDIT:

Или, если вы используете формат utf-8, используйте вместо Django JsonResponse():

return HttpResponse(json.dumps(response_data, ensure_ascii=False), content_type="application/json")

или

return JsonResponse(json.dumps(response_data, ensure_ascii=False), safe=False)

подробнее о safe=False ЗДЕСЬ


OLD:

Вам не нужно что-либо менять.

Хотя Django создает данные JSON в ASCII (от UTF-8), Javascript автоматически расшифровывает его обратно в UTF-8.

Ответ 2

Чтобы поддерживать совместимость JsonResponse и обратно, мы добавили/внедрили/внедрили его в django-compat. Возможно, это помогает кому-то сейчас или в будущем...

Ответ 3

Я еще не нашел лучшего способа использовать уже установленную REST Framework:

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.response import Response

from .models import INITIATOR_TYPES

@api_view(['GET'])
@permission_classes((IsAuthenticatedOrReadOnly, ))
def initiator_types(request):
    data = {t[0]: str(t[1]) for t in INITIATOR_TYPES}
    return Response(data)

Но мне это не очень нравится. Это намного сложнее, чем JsonResponse: fooobar.com/questions/20508/...

Ответ 4

from django.core.serializers.json import DjangoJSONEncoder
from django.http import JsonResponse


class MyJsonResponse(JsonResponse):
    def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, **kwargs):
        json_dumps_params = dict(ensure_ascii=False)
        super().__init__(data, encoder, safe, json_dumps_params, **kwargs)