CherryPy:`error_page.default` 与 `error_page.404` 配置设置有什么区别?
CherryPy: what is the difference between `error_page.default` vs. `error_page.404` config settings?
假设我想显示我自己的 404 和 500 页,到目前为止我发现了 2 种可能性:
1:使用 cherrypy.config.update
def error_page_404(status, message, traceback, version):
return ('Error 404 Page not found')
def error_page_500(status, message, traceback, version):
return ('Error:')
cherrypy.config.update({'error_page.404': error_page_404, 'error_page.500': error_page_500})
- 使用
_cp_config
:
from cherrypy import _cperror
def handle_error():
cherrypy.response.status = 500
cherrypy.log("handle_error() called. Alarm!", "WEBAPP")
cherrypy.response.body = ['Sorry, an error occured. The admin has been notified']
error = _cperror.format_exc()
def error_page(status, message, traceback, version):
cherrypy.log("error_page() called. Probably not very important.", "WEBAPP")
return "Sorry, an error occured."
class Root:
_cp_config = {
'error_page.default': error_page,
'request.error_response': handle_error
}
但是有什么区别或建议更适合使用吗?
request.error_response
允许您设置处理程序来处理一些意外错误,例如您自己从 HTTP 处理程序引发的异常。
您为此选项设置的可调用对象将完全不接收任何参数,您必须检查 sys.exc_info()
以了解详细信息,以了解发生了什么。
您还 必须 自己设置 cherrypy.response.status
和 cherrypy.response.body
,明确地在您的错误处理程序中。
如果要修改 HTTP 错误代码的错误响应(当引发 cherrypy.HTTPError
的实例时,如 raise cherrypy.NotFound
),您可以使用 error_page.default
(包罗万象)或 error_page.404
(特定于错误)用于处理这些错误。
error_page
选项支持文件路径和可调用值。如果使用文件路径,HTML 模板文件可以使用以下替换模式:%(status)s
、%(message)s
、%(traceback)s
和 %(version)s
。
如果您选择使用某个函数,它将接收这些作为参数 (callback(status, message, traceback, version)
)。然后使用此可调用对象的 return 值 HTTP 响应负载。
如您所见,这些方法具有不同的含义以及不同级别的灵活性和可用性。选择适合你的任何东西。在内部,默认 request.error_response
使用 error_page
设置来确定 return 的内容。因此,如果您重新定义 request.error_response
,它将不会使用 error_page.*
设置,除非您明确地让它这样做。
假设我想显示我自己的 404 和 500 页,到目前为止我发现了 2 种可能性:
1:使用 cherrypy.config.update
def error_page_404(status, message, traceback, version):
return ('Error 404 Page not found')
def error_page_500(status, message, traceback, version):
return ('Error:')
cherrypy.config.update({'error_page.404': error_page_404, 'error_page.500': error_page_500})
- 使用
_cp_config
:
from cherrypy import _cperror
def handle_error():
cherrypy.response.status = 500
cherrypy.log("handle_error() called. Alarm!", "WEBAPP")
cherrypy.response.body = ['Sorry, an error occured. The admin has been notified']
error = _cperror.format_exc()
def error_page(status, message, traceback, version):
cherrypy.log("error_page() called. Probably not very important.", "WEBAPP")
return "Sorry, an error occured."
class Root:
_cp_config = {
'error_page.default': error_page,
'request.error_response': handle_error
}
但是有什么区别或建议更适合使用吗?
request.error_response
允许您设置处理程序来处理一些意外错误,例如您自己从 HTTP 处理程序引发的异常。
您为此选项设置的可调用对象将完全不接收任何参数,您必须检查 sys.exc_info()
以了解详细信息,以了解发生了什么。
您还 必须 自己设置 cherrypy.response.status
和 cherrypy.response.body
,明确地在您的错误处理程序中。
如果要修改 HTTP 错误代码的错误响应(当引发 cherrypy.HTTPError
的实例时,如 raise cherrypy.NotFound
),您可以使用 error_page.default
(包罗万象)或 error_page.404
(特定于错误)用于处理这些错误。
error_page
选项支持文件路径和可调用值。如果使用文件路径,HTML 模板文件可以使用以下替换模式:%(status)s
、%(message)s
、%(traceback)s
和 %(version)s
。
如果您选择使用某个函数,它将接收这些作为参数 (callback(status, message, traceback, version)
)。然后使用此可调用对象的 return 值 HTTP 响应负载。
如您所见,这些方法具有不同的含义以及不同级别的灵活性和可用性。选择适合你的任何东西。在内部,默认 request.error_response
使用 error_page
设置来确定 return 的内容。因此,如果您重新定义 request.error_response
,它将不会使用 error_page.*
设置,除非您明确地让它这样做。