如何使用app.yaml为Google Appengine Python创建自定义错误页面

如何使用app.yaml为Google Appengine Python创建自定义错误页面,python,google-app-engine,Python,Google App Engine,对于用Python编写的GoogleAppEngine项目,我希望在出现错误时有自己的错误消息。我想使用错误\u处理程序,如中所述: 在应用程序中,我将webapp与debug=False一起使用 当我在代码中创建错误时,我会从浏览器中获得标准的500服务器错误消息 我已经创建了一个名为default\u error.html 问题是:在哪里保存此自定义错误页 顺便说一句,这是我的app.yamlcode: application: customerrorpage version: 1 run

对于用Python编写的GoogleAppEngine项目,我希望在出现错误时有自己的错误消息。我想使用错误\u处理程序,如中所述:

在应用程序中,我将webapp与
debug=False一起使用

当我在代码中创建错误时,我会从浏览器中获得标准的500服务器错误消息

我已经创建了一个名为
default\u error.html

问题是:在哪里保存此自定义错误页

顺便说一句,这是我的
app.yaml
code:

application: customerrorpage
version: 1
runtime: python
api_version: 1


error_handlers:
- file: default_error.html

handlers:
- url: /good.htm
  static_files: static/good.htm
  upload: static/good.htm

- url: /
  static_files: static/good.htm
  upload: static/good.htm

- url: /.*
  script: main.py

实现这一点的一种方法是定义一个“BaseRequestHandler”类,您的请求处理程序就是从该类子类化的。
BaseRequestHandler类可以重写handle_exception()方法(请参阅)以呈现错误页面。

仅使用python部分定义自定义404对我来说是可行的:

app.error\u handlers[404]=handle\u 404

def handle_404(request, response, exception):
    c = {'exception': exception.status}
    t = jinja2.get_jinja2(app=app).render_template('404.html', **c)
    response.write(t)
    response.set_status(exception.status_int)

这使您能够更好地控制错误消息和可能要显示的其他动态

部分发现了它的工作原理。谢谢大家的回答

HTM文件的位置可以在core中,也可以在单独的目录中。如果是这种情况,请在app.yaml文件中使用以下代码:

error_handlers:
- file: error_handlers/default_error.html
要显示的html文件现在应该放在错误处理程序目录中

在main.py中导入不存在的模块时,将显示上面的页面

为了获取500个错误,我使用webapp2显示一个自定义错误页面。发生错误时,始终显示此页面。即使存在超额配额错误且正确配置了app.yaml。我还删除了webapp2并再次使用webapp。现在根本不显示任何页面


我有另一个应用程序,目前已超过。如何显示超配额html页面?这是一个bug吗?

BaseRequestHandler类与app.yaml的使用之间有什么关系?谢谢你的建议。但是,我不需要定义自定义404错误页面。我将以一种简洁的方式接受所有的输入和响应。这就是理论。在实践中,我可能会犯一个程序错误,因为我没有进行足够的测试,或者项目变得非常流行,出现了超配额错误。我的假设是,所有服务器错误(500个错误)和所有其他特定于Appengine的服务器错误(如超过配额)都可以通过app.yaml进行自定义。所以问题是,当我想使用yaml.app来处理此类错误时,我应该在哪里保存我的自定义错误页面?您可以向错误处理程序属性添加一个过滤器。超配额看起来像“-错误代码:超配额”。您可以为配额、DoS保护和超时添加单独的筛选器-