1 """
2
3 Tutorial: HTTP errors
4
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.
8
9 """
10
11 import os
12 localDir = os.path.dirname(__file__)
13 curpath = os.path.normpath(os.path.join(os.getcwd(), localDir))
14
15 import cherrypy
16
17
19
20
21 _cp_config = {'error_page.403' : os.path.join(curpath, "custom_error.html")}
22
24
25 tracebacks = cherrypy.request.show_tracebacks
26 if tracebacks:
27 trace = 'off'
28 else:
29 trace = 'on'
30
31 return """
32 <html><body>
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>
37 <ul>
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>
42 </ul>
43 <p><a href="/messageArg">You can also set the response body
44 when you raise an error.</a></p>
45 </body></html>
46 """ % trace
47 index.exposed = True
48
56 toggleTracebacks.exposed = True
57
61 error.exposed = True
62
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
69
70
71 import os.path
72 tutconf = os.path.join(os.path.dirname(__file__), 'tutorial.conf')
73
74 if __name__ == '__main__':
75
76
77
78 cherrypy.quickstart(HTTPErrorDemo(), config=tutconf)
79 else:
80
81 cherrypy.tree.mount(HTTPErrorDemo(), config=tutconf)
82