kitaro-tn
9/14/2017 - 2:06 AM

Django (1.8) JSONView

Django (1.8) JSONView

# -*- coding: utf-8 -*-

from django.core import serializers
from django.http import HttpResponse
from django.http import JsonResponse
from django.db.models.query import QuerySet
from django.views.generic.base import TemplateView
from django.views.generic.detail import BaseDetailView

class JSONResponseMixin(object):

    def render_to_json_response(self, context, **response_kwargs):
        return JsonResponse(
                self.convert_data(context),
                safe=False,
                **response_kwargs
                )

    def convert_data(self, context):
        if isinstance(context, QuerySet):
            return serializers.serialize("python", context, ensure_ascii=False)
        else:
            return context

class JSONView(JSONResponseMixin, TemplateView):
    def render_to_response(self, context, **response_kwargs):
        return self.render_to_json_response(context, **response_kwargs)

class JSONDetailView(JSONResponseMixin, BaseDetailView):
    def render_to_response(self, context, **response_kwargs):
        return self.render_to_json_response(context, **response_kwargs)