对于这样的错误处理程序,我有一个“catch all”正则表达式:
(r'/.*', errors.Error)
它列在所有其他项之后,以匹配“其他所有项”。在
当一个页面不存在时,它的工作原理是优雅地失败。在
不过,我还有一个静态文件目录,上传如下:
^{pr2}$因此,如果我试图在/files/
中加载一个与该目录中现有文件不对应的URL,我将得到一个:
Error: Not Found
The requested URL was not found on this server.
在不必分别列出要上载的每个文件的情况下,我如何捕获此错误;理想情况下,使用上面相同的处理程序errors.Error
?在
不幸的是,没有什么好办法。功能请求在这里: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
:URL路径与特殊静态处理程序的URL模式相匹配。然后请求的静态处理程序意识到不存在该文件。控件不会返回到路由逻辑,也没有机会自定义静态处理程序的响应。静态处理程序只返回泛型404。在
如果
^{pr2}$static_files
的URL模式与现有的文件名完全匹配,那么不匹配的URL路径将落入后续处理程序中,可能包括底部的一个catch all。但这实际上是在配置文件中单独列出所有静态文件:同样不幸的是,
error_handlers:
也没有帮助,因为它还不支持自定义404。值得注意的是,如果handlers:
与URL不匹配,则App Engine返回的404也是通用的,也无法自定义。在完全满足这一要求而不在处理程序的URL模式中列出静态文件名的唯一方法是不使用静态文件,而是使用应用程序处理程序从应用程序文件中提供静态数据(如果找不到,则提供自定义404消息)。在
捕捉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。在相关问题 更多 >
编程相关推荐