错误处理

网站在处理用户的请求后,响应状态码不一定全部是 200,有可能出现 URL 不存在的 404 错误,或者没有权限访问的 403 错误等。针对这些非 200 的错误状态码,可以为每个错误状态码实现一个页面,在出现类似错误时,Flask 会自动返回一个包含错误状态码的页面。添加错误状态码的处理逻辑是通过 @app.errorhandler 装饰器实现的,也是属于钩子函数的一种,我们在 hooks.py 中添加以下代码。

def bbs_404_error(error):
    return render_template("errors/404.html"), 404

def bbs_401_error(error):
    return render_template("errors/401.html"), 401

def bbs_500_error(error):
    return render_template("errors/500.html"), 500

下面在 app.py 中,将以上 3 个处理错误的钩子函数注册到 app 中,代码如下。

app.errorhandler(401)(hooks.bbs_401_error)
app.errorhandler(404)(hooks.bbs_404_error)
app.errorhandler(500)(hooks.bbs_500_error)

在浏览器中访问一个不存在的URL,如 http://127.0.0.1:5000/abc,可以看到会显示 404 错误页面,如图 9-50 所示。

image 2025 01 22 17 23 09 638
Figure 1. 图9-50 404错误页面