繁体   English   中英

龙卷风中的错误处理

[英]Error Handling in Tornado

我是Tornado的新手,正在编写一个基本应用程序,但还需要添加错误处理。 下面是代码。

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado import gen
from tornado.web import asynchronous
from tornado.options import define, options

define("port", default=8888, help="run on the given port", type=int)

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/", HomeHandler),
            (r"/mycompany", myCustomHandler),
            (r"/mycompany/", myCustomHandler),
        ]
        super(Application, self).__init__(handlers)

class HomeHandler(tornado.web.RequestHandler):
        def get(self):
                self.render("home.html")

class myCustom(tornado.web.RequestHandler):
        def get(self):
                self.write("Processing....")
                self.clear()
                self.finish()

def main():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":
    main()

home.html可以正常工作。

接下来,我希望用户使用类似http:// host:port / mycompany /?id = 9999的格式传递参数。

但是要在有人输入* host:port / blahblah或* host:port / mycompany /?something = 9999时显示404 PAGE。 我该怎么做? 谢谢。

要将自定义错误页面用于未知URL,请使用Application()default_handler_class参数。 一个处理程序产生的错误使用write_error方法产生的错误页面。 对两者使用相同的错误处理会有些复杂。 这是基本的脚手架:

class BaseHandler(tornado.web.RequestHandler):
    def write_error(self, status_code, **kwargs):
        if status_code == 404:
            self.render("404.html")
        else:
            self.render("error.html")

class My404Handler(BaseHandler):
    def prepare(self):
        raise tornado.web.HTTPError(404)

class MyCustomHandler(BaseHandler):
    def get(self):
        if not self.valid_arguments():
            raise tornado.web.HTTPError(400)

app = Application([...], default_handler_class=My404Handler)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM