From ce6b3192880cd66a0a16c3d88e0da969f6ce6e42 Mon Sep 17 00:00:00 2001 From: David Baumgold Date: Thu, 20 Jun 2013 16:45:46 -0400 Subject: [PATCH] Added jsonable_server_error in common/util/views.py --- common/djangoapps/util/views.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/common/djangoapps/util/views.py b/common/djangoapps/util/views.py index 851202caec..10492e383d 100644 --- a/common/djangoapps/util/views.py +++ b/common/djangoapps/util/views.py @@ -4,7 +4,10 @@ import sys from django.conf import settings from django.core.validators import ValidationError, validate_email -from django.http import Http404, HttpResponse, HttpResponseNotAllowed +from django.views.decorators.csrf import requires_csrf_token +from django.views.defaults import server_error +from django.http import (Http404, HttpResponse, HttpResponseNotAllowed, + HttpResponseServerError) from dogapi import dog_stats_api from mitxmako.shortcuts import render_to_response import zendesk @@ -16,6 +19,19 @@ import track.views log = logging.getLogger(__name__) +@requires_csrf_token +def jsonable_server_error(request, template_name='500.html'): + """ + 500 error handler that serves JSON on an AJAX request, and proxies + to the Django default `server_error` view otherwise. + """ + if request.is_ajax(): + msg = {"error": "The edX servers encountered an error"} + return HttpResponseServerError(json.dumps(msg)) + else: + return server_error(request, template_name=template_name) + + def calculate(request): ''' Calculator in footer of every page. ''' equation = request.GET['equation'] @@ -228,4 +244,3 @@ def accepts(request, media_type): """Return whether this request has an Accept header that matches type""" accept = parse_accept_header(request.META.get("HTTP_ACCEPT", "")) return media_type in [t for (t, p, q) in accept] -