Создание UTF-8 JsonResponse в Django
есть ли простой способ переопределить DjangoJSONEncoder.ensure_ascii
и установить его в False
или выводить текст без ascii в django.http.JsonResponse
любым другим способом?
4 ответов
EDIT:
или если вы склонны к формату utf-8, используйте вместо Jsonresponse () Django:
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
здесь
старый:
вам не нужно ничего менять.
хотя Django создает данные JSON в ASCII (из UTF-8), Javascript автоматически декодирует их обратно в UTF-8.
сохранить JsonResponse for-и обратная совместимость, мы добавили / backported / реализовали его в django-compat. Возможно, это поможет кому-то сейчас или в будущем...
Я еще не нашел лучшего способа, чем использовать уже установленную платформу REST:
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
: https://stackoverflow.com/a/24411716/854477
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)