5 HTTPError is used to return an error response to the client.
6 CherryPy has lots of options regarding how such errors are
7 logged, displayed, and formatted.
12 localDir
= os
.path
.dirname(__file__
)
13 curpath
= os
.path
.normpath(os
.path
.join(os
.getcwd(), localDir
))
18 class HTTPErrorDemo(object):
20 # Set a custom response for 403 errors.
21 _cp_config
= {'error_page.403' : os
.path
.join(curpath
, "custom_error.html")}
24 # display some links that will result in errors
25 tracebacks
= cherrypy
.request
.show_tracebacks
33 <p>Toggle tracebacks <a href="toggleTracebacks">%s</a></p>
34 <p><a href="/doesNotExist">Click me; I'm a broken link!</a></p>
35 <p><a href="/error?code=403">Use a custom error page from a file.</a></p>
36 <p>These errors are explicitly raised by the application:</p>
38 <li><a href="/error?code=400">400</a></li>
39 <li><a href="/error?code=401">401</a></li>
40 <li><a href="/error?code=402">402</a></li>
41 <li><a href="/error?code=500">500</a></li>
43 <p><a href="/messageArg">You can also set the response body
44 when you raise an error.</a></p>
49 def toggleTracebacks(self
):
50 # simple function to toggle tracebacks on and off
51 tracebacks
= cherrypy
.request
.show_tracebacks
52 cherrypy
.config
.update({'request.show_tracebacks': not tracebacks
})
54 # redirect back to the index
55 raise cherrypy
.HTTPRedirect('/')
56 toggleTracebacks
.exposed
= True
58 def error(self
, code
):
59 # raise an error based on the get query
60 raise cherrypy
.HTTPError(status
= code
)
64 message
= ("If you construct an HTTPError with a 'message' "
65 "argument, it wil be placed on the error page "
66 "(underneath the status line by default).")
67 raise cherrypy
.HTTPError(500, message
=message
)
68 messageArg
.exposed
= True
72 tutconf
= os
.path
.join(os
.path
.dirname(__file__
), 'tutorial.conf')
74 if __name__
== '__main__':
75 # CherryPy always starts with app.root when trying to map request URIs
76 # to objects, so we need to mount a request handler root. A request
77 # to '/' will be mapped to HelloWorld().index().
78 cherrypy
.quickstart(HTTPErrorDemo(), config
=tutconf
)
80 # This branch is for the test suite; you can ignore it.
81 cherrypy
.tree
.mount(HTTPErrorDemo(), config
=tutconf
)