自定义错误页

Flask带有一个方便的abort()函数,用于提前中止带有HTTP错误代码的请求。它还将为您提供一个简单的黑色和白色错误页面的基本描述,但没有什么奇特。

依赖于错误代码的不同,用户看到某个错误的可能性大小也不同。

常见错误代码

下面列出了一些用户经常遇到的错误代码,即使在这个应用准确无误的情况下也可能发生:

404 Not Found
经典的“哎呦,您输入的 URL 当中有错误”消息。 这个消息太常见了,即使是 互联网的新手也知道 404 代号的意义: 该死,我寻找的东西不在那儿。 确保 404 页面上有一些有用的信息是一个好主意,至少应该提供一个返回主页的链接。
403 Forbidden
如果您的网站包含一些类型的访问控制,您必须向非法的请求返回 403 错误代号。 所以请确保用户不会在试图访问了一个禁止访问的资源后不知所措。
410 Gone
你知道“404未找到”有一个名叫“410 Gone”的兄弟吗? 您知道 404 Not Found 代号还有一个兄弟名为 410 Gone 么? 很少有人真正实现 它,您可以考虑将其返回给对以前曾经存在、但是现在已经删除的资源的请求,而 不是直接返回 404 。 如果您还没有从数据库里永久删除这个文档,仅仅是将他们 标记为删除。
500内部伺服器错误
通常在出现编程错误或者服务器过载的时候会返回这个错误代号。 因为您的应用 总有一天 会出现错误(请参考 记录应用错误 )

错误处理程序

一个错误处理器是一个类似于视图函数的函数,但是它在错误发生时被执行,并且 错误被当成一个参数传递进来。 错误很可能是一个HTTPException,但在一种情况下,它可能是一个不同的错误:内部服务器错误的处理程序也将传递其他异常实例,如果他们未捕获。

错误处理器和要捕捉的错误代码使用 errorhandler() 装饰器注册。 请记住 Flask 不会 替您设置错误代码,所以请确保在返回 response 对象时,提供了 对应的 HTTP 状态代码。

请注意,如果添加“500 Internal Server Error”的错误处理程序,Flask将不会触发它,如果它在Debug模式下运行。

在这里放一个 漂亮的页面是一个非常好的主意。

from flask import render_template

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

一个示例模板可能会如下所示:

{% 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 %}