python - Tornado Web 自定义 404,其中路径不存在

标签 python tornado

我正在尝试更改 Tornado Web 应用程序实例在无法路由(或确认 Content-Type json)时给出的 native 404 响应。

我找不到执行此操作的文档,所以现在只是添加一个匹配所有内容的最终正则表达式:

import tornado.web

class BaseHandler(tornado.web.RequestHandler):
    def write_error(self, status_code, **kwargs):
        self.finish({
            'error': {
                'code': status_code,
                'message': self._reason,
            }
        })


class NotFoundHandler(BaseHandler):
    def get(self, *args, **kwargs):
        raise tornado.web.HTTPError(
            status_code=404,
            reason="Invalid resource path."
        )


app = tornado.web.Application([
    (r"/ping", PingHandler),
    # ...
    (r"(.*)", NotFoundHandler),
])

这感觉有点像黑客。有没有办法更全局地设置它?

最佳答案

根据documentation您可以使用 default_handler_class 来执行此操作。

For 404 errors, use the default_handler_class Application setting. This handler should override prepare instead of a more specific method like get() so it works with any HTTP method. It should produce its error page as described above: either by raising a HTTPError(404) and overriding write_error, or calling self.set_status(404) and producing the response directly in prepare().

例如:

class NotFoundHandler(RequestHandler):
    def prepare(self):  # for all methods
        raise tornado.web.HTTPError(
            status_code=404,
            reason="Invalid resource path."
        )

app = Application(..., default_handler_class=NotFoundHandler)

关于python - Tornado Web 自定义 404,其中路径不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43793881/

相关文章:

python - 与 == 比较时,具有相同 id 的对象是否总是相等的?

python - 使用 statsmodels 进行最大似然估计会使事情变得过于复杂?希望大家推荐

python - Django Web 应用程序的棘手编码逻辑

python - 生成大文件并发送

python - 包 'python-pybabel' 没有安装候选

python - 如何在 Python 中使用请求处理 <TooManyRedirects : Exceeded 30 redirects.> 异常?

python - 如何确定在 Tornado/Flask/Python 上上传 HTTP 请求需要多长时间?

python - 如何停止 Tornado 网络服务器?

python - Tornado - RequestHandler 的 get_argument()、get_query_argument() 和 get_body_argument() 之间有什么区别?

python - Tornado URL 正则表达式 : presence of a specific word into a keyword argument