HTTP 异常 — Werkzeug 文档

来自菜鸟教程
Werkzeug/docs/1.0.x/exceptions
跳转至:导航、​搜索

HTTP 异常

错误类别

Werkzeug 中存在以下错误类:

exception HTTPUnicodeError
此异常用于指示请求数据的 Unicode 解码错误。 有关更多信息,请参阅 Unicode 章节。


基类

所有异常都实现了这个通用接口:


特殊的 HTTP 异常

从 Werkzeug 0.3 开始,一些内置类引发异常,这些异常看起来像常规的 Python 异常(例如 KeyError),但同时也是 BadRequest HTTP 异常。 做出这个决定是为了简化一个常见的模式,如果客户端以应用程序无法正确恢复的方式篡改提交的表单数据并且应该使用 400 BAD REQUEST 中止,您希望中止。

假设应用程序捕获所有 HTTP 异常并对它们做出正确的反应,视图函数可以安全地执行以下操作并且不必检查键是否存在:

def new_post(request):
    post = Post(title=request.form['title'], body=request.form['body'])
    post.save()
    return redirect(post.url)

如果表单中缺少 title 或 body,则会引发一个特殊的键错误,其行为类似于 KeyError 但也是 BadRequest 异常。


简单中止

有时仅通过错误代码引发异常很方便,而无需导入异常并查找名称等。 为此,有 abort() 功能。

如果您想将此功能与自定义异常一起使用,您可以创建一个中止类的实例:


自定义错误

从上面的列表中可以看出,并非所有状态代码都可用作错误。 特别是重定向和其他不代表错误的非 200 状态代码丢失。 对于重定向,您可以使用实用程序中的 redirect() 函数。

如果您想自己添加错误,您可以将 HTTPException 子类化:

from werkzeug.exceptions import HTTPException

class PaymentRequired(HTTPException):
    code = 402
    description = '<p>Payment required.</p>'

这是您自己的异常所需的最少代码。 如果您想为错误添加更多逻辑,您可以覆盖 get_description()get_body()get_headers()get_response() 方法。 在任何情况下,您都应该查看异常模块的源代码。

您可以使用 description 参数覆盖构造函数中的默认描述:

raise BadRequest(description='Request failed because X was not present')