代码之家  ›  专栏  ›  技术社区  ›  Mengo

Tornado:如果在StaticFileHandler中找不到,如何发送默认文件

  •  1
  • Mengo  · 技术社区  · 7 年前

    当没有找到请求的静态文件时,我想发回一个默认文件。如。 /images/dog.png -&燃气轮机; /images/default.png .

    here .

    if (os.path.isdir(absolute_path) and
        self.default_filename is not None):
    

    背景 default_filename 用于请求,如 /images/ /图像/默认值。巴布亚新几内亚 .

    1 回复  |  直到 7 年前
        1
  •  1
  •   rsz    7 年前

    有趣的 validate_absolute_path 函数,如果不存在,为什么不重写它以提供默认文件?

    import tornado 
    import tornado.web
    import tornado.ioloop
    
    import os
    
    DEFAULT_ABSPATH = os.path.dirname(os.path.abspath(__file__))
    
    class StaticFileOrDefaultHandler(tornado.web.StaticFileHandler):
    
        def validate_absolute_path(self, root, absolute_path):
            try:
                return super(StaticFileOrDefaultHandler, self).validate_absolute_path(root, absolute_path)
            except tornado.web.HTTPError as e:
                if e.status_code == 404:
                    return os.path.join(DEFAULT_ABSPATH, 'default.png')
                raise e
    
    
    app = tornado.web.Application([
        (r'/(.*)', StaticFileOrDefaultHandler, { 'path': DEFAULT_ABSPATH }),
    ])
    
    if __name__ == '__main__':
        app.listen(8888)
        tornado.ioloop.IOLoop.instance().start()
    

    编辑

    HTTPError(403) 检查 status_code 如果引发的错误是 404 .