Djangoでjsonp

なんかパッケージがあるのかなと思ったけど見当たらず。このくらいは自前で実装するのが普通なのかな?

と思ったらdjango-decoratorsというのがgithubに上がってて、いい感じにつかえるデコレータが定義されていた。
julian-amaya/django-decorators · GitHub

def json_response(func):
    """
    A decorator thats takes a view response and turns it
    into json. If a callback is added through GET or POST
    the response is JSONP.
    """
    def decorator(request, *args, **kwargs):
        objects = func(request, *args, **kwargs)
        if isinstance(objects, HttpResponse):
            return objects
        try:
            data = simplejson.dumps(objects)
            if 'callback' in request.REQUEST:
                # a jsonp response!
                data = '%s(%s);' % (request.REQUEST['callback'], data)
                return HttpResponse(data, "text/javascript")
        except:
            data = simplejson.dumps(str(objects))
        return HttpResponse(data, "application/json")
    return decorator


ログイン状態をjsonpで返すviewで試してみた。

@json_response
def login_status(request):
    return {'is_authenticated': request.user.is_authenticated()}