Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
60e9a77a
Commit
60e9a77a
authored
Jul 01, 2013
by
David Baumgold
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #233 from edx/db/ajax-server-error
Make server errors return JSON if requested via AJAX
parents
f9369b4f
7824b8c8
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
3 deletions
+46
-3
cms/djangoapps/contentstore/views/error.py
+26
-1
cms/static/coffee/src/main.coffee
+3
-0
common/djangoapps/util/views.py
+17
-2
No files found.
cms/djangoapps/contentstore/views/error.py
View file @
60e9a77a
from
django.http
import
HttpResponseServerError
,
HttpResponseNotFound
from
django.http
import
(
HttpResponse
,
HttpResponseServerError
,
HttpResponseNotFound
)
from
mitxmako.shortcuts
import
render_to_string
,
render_to_response
import
functools
import
json
__all__
=
[
'not_found'
,
'server_error'
,
'render_404'
,
'render_500'
]
def
jsonable_error
(
status
=
500
,
message
=
"The Studio servers encountered an error"
):
"""
A decorator to make an error view return an JSON-formatted message if
it was requested via AJAX.
"""
def
outer
(
func
):
@functools.wraps
(
func
)
def
inner
(
request
,
*
args
,
**
kwargs
):
if
request
.
is_ajax
():
content
=
json
.
dumps
({
"error"
:
message
})
return
HttpResponse
(
content
,
content_type
=
"application/json"
,
status
=
status
)
else
:
return
func
(
request
,
*
args
,
**
kwargs
)
return
inner
return
outer
@jsonable_error
(
404
,
"Resource not found"
)
def
not_found
(
request
):
return
render_to_response
(
'error.html'
,
{
'error'
:
'404'
})
@jsonable_error
(
500
,
"The Studio servers encountered an error"
)
def
server_error
(
request
):
return
render_to_response
(
'error.html'
,
{
'error'
:
'500'
})
@jsonable_error
(
404
,
"Resource not found"
)
def
render_404
(
request
):
return
HttpResponseNotFound
(
render_to_string
(
'404.html'
,
{}))
@jsonable_error
(
500
,
"The Studio servers encountered an error"
)
def
render_500
(
request
):
return
HttpResponseServerError
(
render_to_string
(
'500.html'
,
{}))
cms/static/coffee/src/main.coffee
View file @
60e9a77a
...
...
@@ -19,6 +19,9 @@ $ ->
if
ajaxSettings
.
notifyOnError
is
false
return
if
jqXHR
.
responseText
try
message
=
JSON
.
parse
(
jqXHR
.
responseText
).
error
catch
error
message
=
_
.
str
.
truncate
(
jqXHR
.
responseText
,
300
)
else
message
=
gettext
(
"This may be happening because of an error with our server or your internet connection. Try refreshing the page or making sure you are online."
)
...
...
common/djangoapps/util/views.py
View file @
60e9a77a
...
...
@@ -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
]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment