当找不到请求的静态文件时,我想发回一个默认文件。例如。 /images/dog.png
- > /images/default.png
。
深入挖掘源代码here。
if (os.path.isdir(absolute_path) and
self.default_filename is not None):
设置default_filename
用于请求/images/
- > /images/default.png
。
答案 0 :(得分:1)
有趣的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
核对。