捕获静态“找不到文件”错误

2024-03-29 08:18:32 发布

您现在位置:Python中文网/ 问答频道 /正文

对于这样的错误处理程序,我有一个“catch all”正则表达式:

(r'/.*', errors.Error)

它列在所有其他项之后,以匹配“其他所有项”。在

当一个页面不存在时,它的工作原理是优雅地失败。在

不过,我还有一个静态文件目录,上传如下:

^{pr2}$

因此,如果我试图在/files/中加载一个与该目录中现有文件不对应的URL,我将得到一个:

Error: Not Found

The requested URL was not found on this server.

在不必分别列出要上载的每个文件的情况下,我如何捕获此错误;理想情况下,使用上面相同的处理程序errors.Error?在


Tags: 文件url处理程序错误静态情况error页面
2条回答

不幸的是,没有什么好办法。功能请求在这里:https://code.google.com/p/googleappengine/issues/detail?id=8380&q=type%3DFeature%20error%20404&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log

由于文件不在static_dir中,因此无法为404配置自定义处理程序或静态错误页。如果URL与子路径下的任何内容匹配,则static_files也是如此,这相当于static_dir

handlers:
- url: /files/(.*)
  static_files: files/\1
  upload: files/.*

URL路径与特殊静态处理程序的URL模式相匹配。然后请求的静态处理程序意识到不存在该文件。控件不会返回到路由逻辑,也没有机会自定义静态处理程序的响应。静态处理程序只返回泛型404。在

如果static_files的URL模式与现有的文件名完全匹配,那么不匹配的URL路径将落入后续处理程序中,可能包括底部的一个catch all。但这实际上是在配置文件中单独列出所有静态文件:

^{pr2}$

同样不幸的是,error_handlers:也没有帮助,因为它还不支持自定义404。值得注意的是,如果handlers:与URL不匹配,则App Engine返回的404也是通用的,也无法自定义。在

完全满足这一要求而不在处理程序的URL模式中列出静态文件名的唯一方法是不使用静态文件,而是使用应用程序处理程序从应用程序文件中提供静态数据(如果找不到,则提供自定义404消息)。在

handlers:
- url: .*
  script: filehandler.app

捕捉404很简单,如下一行代码

app.error_handlers[404] = handle_404

其中handle_404是处理异常的def方法+您不再需要“catch all”正则表达式。在

在“WSGI应用程序中的异常”“部分中查看本指南:https://webapp-improved.appspot.com/guide/exceptions.html

另请看一下app.yaml错误处理程序参数。See more here。在

相关问题 更多 >