Package cherrypy :: Package tutorial :: Module tut10_http_errors
[hide private]
[frames] | no frames]

Source Code for Module cherrypy.tutorial.tut10_http_errors

 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   
18 -class HTTPErrorDemo(object):
19 20 # Set a custom response for 403 errors. 21 _cp_config = {'error_page.403' : os.path.join(curpath, "custom_error.html")} 22
23 - def index(self):
24 # display some links that will result in errors 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
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}) 53 54 # redirect back to the index 55 raise cherrypy.HTTPRedirect('/')
56 toggleTracebacks.exposed = True 57
58 - def error(self, code):
59 # raise an error based on the get query 60 raise cherrypy.HTTPError(status = code)
61 error.exposed = True 62
63 - def messageArg(self):
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 # 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) 79 else: 80 # This branch is for the test suite; you can ignore it. 81 cherrypy.tree.mount(HTTPErrorDemo(), config=tutconf) 82