Djangoのis_ajaxメソッドを使ってリクエストがAjaxかどうかを判定する

Djangoのdjango.http.HttpRequest.is_ajax()を使うと、簡単にリクエストがAjaxかどうかを判定することができます。リクエストがAjaxを使ったものであれば、同メソッドはTrueを返します。

is_ajax()は、CSRF_FAILURE_VIEWで指定した自作のCSRFエラー用ビューでも動作します。なので、CSRFエラーが発生した場合、それがAjaxを使ったものならばJSON形式のエラーを返し、そうでなければHTTPResponseを返すこともできます。

CSRFエラーとis_ajax()を組み合わせた例:

—- test.js —-

$(‘#test').click(function() {
  $.ajax({
    dataType: ‘json',
    data: {
      ‘csrfmiddlewaretoken': $("#csrfmiddlewaretoken").val()
    },
    type: POST,
    processData: true,
    cache: false,
    url: ‘/',
    success: function(res) {
        if (!res.is_success) {
          // Write a error handling code.
          …
        } else {
        }
    }
  });
});
—- settings.py —-

CSRF_FAILURE_VIEW='views.errors.csrf_failure' 
—- views/errors.py —-

def csrf_failure(request, reason=""):
    if request.is_ajax():
        return http.HttpResponse(simplejson.dumps(dict(is_success=False),
                ensure_ascii=False), content_type=u'application/json')
    else:
        return shortcuts.render_to_response(‘errors/csrf_error.html')

この記事が役に立った場合、シェアしていただけると励みになります!!