当未找到所请求的静态文件时,我希望发送一个默认文件。例如:/images/dog.png -> /images/default.png.
在深入了解源代码这里之后。
if (os.path.isdir(absolute_path) and
self.default_filename is not None):设置default_filename用于请求,如/images/ -> /images/default.png。
发布于 2017-11-14 11:23:15
有趣的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),如果引发的错误是404,请使用status_code进行检查。
https://stackoverflow.com/questions/47277782
复制相似问题