【问题标题】:What does "local to a blueprint" mean?“蓝图本地化”是什么意思?
【发布时间】:2017-01-20 20:40:48
【问题描述】:

我无法理解Blueprint.errorhandlerBlueprint.app_errorhandler 之间的区别。根据 API 文档(重点是我的):

errorhandler(code_or_exception)

注册一个为此蓝图激活的错误处理程序 只要。请注意,路由不会发生在本地 蓝图,因此 404 的错误处理程序通常不由 蓝图,除非它是在视图函数内部引起的。另一个特别的 case 是 500 内部服务器错误,总是从 应用程序。

AFAIK,Flask 中的蓝图对象是“可以在应用程序上注册的一组操作,甚至可以多次注册”。

我的问题是:

  1. 错误如何可能是一组操作的本地错误?
  2. 视图函数如何导致错误?

【问题讨论】:

    标签: python flask error-handling decorator


    【解决方案1】:

    'local' 表示与路由相关的蓝图注册。蓝图路由始终以您注册蓝图的名称为前缀,因此它们自然分组,并且在 URL 路径拓扑意义上它们具有局部性。 'nonlocal' 然后是与蓝图无关的任何视图;它们会有不同的前缀或根本没有前缀。

    视图函数可以引发exceptions,并且特定异常(任何从HTTPException 派生的异常)都有与之关联的HTTP 错误代码。 @blueprint.errorhandler() 为此类异常或相关的 HTTP 错误代码注册处理程序。

    文档说明的是在路由期间引发的错误(例如 404 NotFound 错误)还没有视图,因此您无法将该错误路由到特定蓝图要么。

    在底层,当路由成功找到处理请求的视图时,request.blueprint 被设置为与该视图对应的关联注册蓝图。如果随后发生错误并且需要找到错误处理程序,request.blueprint 值让 Flask 找到“本地”错误处理程序。

    【讨论】:

    • 所以@blueprint.errorhandler() 检查异常发生的位置(如果异常结果是“非本地”,即未在此特定蓝图中定义,则它什么也不做),而 @blueprint.app_errorhandler() 会,对?
    • 抱歉,我的回答不够准确;我已经更新了它。所以一旦找到视图,Flask 可以将错误路由到正确的蓝图特定的错误处理程序。 app_errorhandler() 基本上调用Flask.errorhandler,因此将用于所有无法路由到特定蓝图的(匹配)错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2016-05-18
    相关资源
    最近更新 更多