自定义错误页

Flask附带了一个方便的:func:`~flask.abort`函数,可以提前中止HTTP错误代码的请求。 它还将为您提供一个简单的黑白错误页面,并提供基本描述,但没什么特别的。

根据错误代码的不同,用户实际看到此类错误的可能性越来越小。

常见错误代码

以下错误代码是一些经常向用户显示的错误代码,即使应用程序的行为正确:

404 未找到
老好人“伙计,你打错了那个网址”的信息。很常见,连互联网新手都知道404意味着:该死,我要找的东西不在那里。确保404页面上确实有一些有用的东西是一个非常好的主意,至少有一个指向索引的链接。
403禁止
如果你的网站上有某种访问控制,你将不得不发送一个403代码为不允许的资源。因此,确保用户在尝试访问禁止的资源时不会丢失。
410 Gone
您是否知道“404 Not Found”有一个名为“410 Gone”的兄弟? 很少有人实际实现这一点,但想法是以前存在并被删除的资源以410而不是404回答。如果您没有从数据库中永久删除文档但只是将其标记为已删除,请用户帮忙并使用 改为410代码并显示一条消息,表明他们正在寻找的内容已被永久删除。
500内部服务器错误
通常发生在编程错误或服务器过载时。一个非常好的主意是在那里有一个好页面,因为你的应用程序 will 迟早会失败(另见: 应用错误处理

错误处理程序

错误处理程序是在引发错误类型时返回响应的函数,类似于视图是在请求URL匹配时返回响应的函数。它传递了正在处理的错误的实例,这很可能是 HTTPException . 除了显式的500个错误之外,“500个内部服务器错误”的错误处理程序还将传递未捕获的异常。

向注册了错误处理程序 errorhandler() 装饰师 register_error_handler() 方法。可以为状态代码(如404)或异常类注册处理程序。

响应的状态代码不会设置为处理程序的代码。确保在从处理程序返回响应时提供适当的HTTP状态代码。

在调试模式下运行时,将不使用“500内部服务器错误”的处理程序。相反,将显示交互式调试器。

下面是“404页未找到”异常的示例实现:

from flask import render_template

@app.errorhandler(404)
def page_not_found(e):
    # note that we set the 404 status explicitly
    return render_template('404.html'), 404

当使用 application factory pattern ::

from flask import Flask, render_template

def page_not_found(e):
  return render_template('404.html'), 404

def create_app(config_filename):
    app = Flask(__name__)
    app.register_error_handler(404, page_not_found)
    return app

示例模板可能是:

{% extends "layout.html" %}
{% block title %}Page Not Found{% endblock %}
{% block body %}
  <h1>Page Not Found</h1>
  <p>What you were looking for is just not there.
  <p><a href="{{ url_for('index') }}">go somewhere nice</a>
{% endblock %}