Bottle.py error routing

前端 未结 3 948
再見小時候
再見小時候 2021-02-13 03:46

Bottle.py ships with an import to handle throwing HTTPErrors and route to a function.

Firstly, the documentation claims I can (and so do several examples):



        
相关标签:
3条回答
  • 2021-02-13 04:21

    In some cases I find it's better to subclass Bottle. Here's an example of doing that and adding a custom error handler.

    #!/usr/bin/env python3
    from bottle import Bottle, response, Route
    
    class MyBottle(Bottle):
        def __init__(self, *args, **kwargs):
            Bottle.__init__(self, *args, **kwargs)
            self.error_handler[404] = self.four04
            self.add_route(Route(self, "/helloworld", "GET", self.helloworld))
        def helloworld(self):
            response.content_type = "text/plain"
            yield "Hello, world."
        def four04(self, httperror):
            response.content_type = "text/plain"
            yield "You're 404."
    
    if __name__ == '__main__':
        mybottle = MyBottle()
        mybottle.run(host='localhost', port=8080, quiet=True, debug=True)
    
    0 讨论(0)
  • 2021-02-13 04:34

    If you want to embed your errors in another module, you could do something like this:

    error.py

    def custom500(error):
        return 'my custom message'
    
    handler = {
        500: custom500,
    }
    

    app.py

    from bottle import *
    import error
    
    app = Bottle()
    app.error_handler = error.handler
    
    @app.route('/')
    def divzero():
        return 1/0
    
    run(app)
    
    0 讨论(0)
  • 2021-02-13 04:37

    This works for me:

    from bottle import error, run, route, abort
    
    @error(500)
    def custom500(error):
        return 'my custom message'
    
    @route("/")
    def index():
        abort("Boo!")
    
    run()
    
    0 讨论(0)
提交回复
热议问题