From 1bdc5eacc6290c486796eb5ab8fa29092137dab6 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Thu, 29 Dec 2011 13:24:52 +0000 Subject: Add JSONP. Fixes #82 --- djangorestframework/renderers.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'djangorestframework/renderers.py') diff --git a/djangorestframework/renderers.py b/djangorestframework/renderers.py index 3f951ba1..2affd7f2 100644 --- a/djangorestframework/renderers.py +++ b/djangorestframework/renderers.py @@ -26,6 +26,7 @@ __all__ = ( 'BaseRenderer', 'TemplateRenderer', 'JSONRenderer', + 'JSONPRenderer', 'DocumentingHTMLRenderer', 'DocumentingXHTMLRenderer', 'DocumentingPlainTextRenderer', @@ -113,6 +114,28 @@ class JSONRenderer(BaseRenderer): return json.dumps(obj, cls=DateTimeAwareJSONEncoder, indent=indent, sort_keys=sort_keys) +class JSONPRenderer(JSONRenderer): + """ + Renderer which serializes to JSONP + """ + + media_type = 'application/json-p' + format = 'json-p' + renderer_class = JSONRenderer + callback_parameter = 'callback' + + def _get_callback(self): + return self.view.request.GET.get(self.callback_parameter, self.callback_parameter) + + def _get_renderer(self): + return self.renderer_class(self.view) + + def render(self, obj=None, media_type=None): + callback = self._get_callback() + json = self._get_renderer().render(obj, media_type) + return "%s(%s);" % (callback, json) + + class XMLRenderer(BaseRenderer): """ Renderer which serializes to XML. @@ -376,6 +399,7 @@ class DocumentingPlainTextRenderer(DocumentingTemplateRenderer): DEFAULT_RENDERERS = ( JSONRenderer, + JSONPRenderer, DocumentingHTMLRenderer, DocumentingXHTMLRenderer, DocumentingPlainTextRenderer, -- cgit v1.2.3