【问题标题】:CherryPy: what is the difference between `error_page.default` vs. `error_page.404` config settings?CherryPy:`error_page.default` 与 `error_page.404` 配置设置有什么区别?
【发布时间】:2019-08-09 20:47:42
【问题描述】:

假设我想显示我自己的 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})
  1. 使用_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 
     } 

但是有什么区别或建议更适合使用吗?

【问题讨论】:

  • error_page.default 是万能的,如果错误代码没有自己的处理程序,则使用它。
  • 老实说,我不太明白这个问题的动机。
  • @webKnjaZ ,我有 2 个选项,他们似乎做了类似的事情 - 我的动机是了解根本区别是什么以及处理它的标准方法是什么。毕竟这是一个学习和提问的平台,所以即使这可能是一个愚蠢的问题 - 我认为它是有目的的。
  • 在下面查看我的答案。

标签: python cherrypy


【解决方案1】:

request.error_response 允许您设置一个处理程序来处理一些意外错误,例如您自己的 HTTP 处理程序引发的异常。 您为此选项设置的可调用对象将不会收到任何参数,您必须检查sys.exc_info() 以了解详细信息,以了解发生了什么。 您还必须自行在错误处理程序中明确设置 cherrypy.response.statuscherrypy.response.body

如果您想修改 HTTP 错误代码的错误响应(当引发 cherrypy.HTTPError 的实例时,例如 raise cherrypy.NotFound),您可以使用 error_page.default(catch-all)或 error_page.404(错误特定) 用于处理这些错误。 error_page 选项支持文件路径和可调用值。在使用文件路径的情况下,HTML 模板文件可以使用以下替换模式:%(status)s%(message)s%(traceback)s%(version)s。 如果您选择使用函数,它将接收这些作为参数 (callback(status, message, traceback, version))。该可调用对象的返回值随后将用于 HTTP 响应负载。

如您所见,这些方法具有不同的含义以及不同级别的灵活性和可用性。选择适合你的任何东西。在内部,默认的request.error_response 使用error_page 设置来确定要返回的内容。因此,如果您重新定义 request.error_response,它将不会使用 error_page.* 设置,除非您明确要求这样做。

the docstring with some explanation here

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 2012-10-03
    • 1970-01-01
    • 2016-04-22
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2011-08-04
    相关资源
    最近更新 更多