1. 程式人生 > >Flask自定義出錯頁面

Flask自定義出錯頁面

Flask 有一個方便的 abort() 函式,它可以通過一個 HTTP 出錯程式碼 退出一個請求。它還提供一個包含基本說明的出錯頁面,頁面顯示黑白的文字,很樸 素。

使用者可以根據錯誤程式碼或多或少知道發生了什麼錯誤。

常見出錯程式碼

以下出錯程式碼是使用者常見的,即使應用正常也會出現這些出錯程式碼:

404 Not Found

這是一個古老的“朋友,你使用了一個錯誤的 URL ”資訊。這個資訊出現得如 此頻繁,以至於連剛上網的新手都知道 404 代表:該死的,我要看的東西不見 了。一個好的做法是確保 404 頁面上有一些真正有用的東西,至少要有一個返 回首頁的連結。

403 Forbidden

如果你的網站上有某種許可權控制,那麼當用戶訪問未獲授權內容時應當傳送 403 程式碼。因此請確保當用戶嘗試訪問未獲授權內容時得到正確的反饋。

410 Gone

你知道 “404 Not Found” 有一個名叫 “410 Gone” 的兄弟嗎?很少有人使用這 個程式碼。如果資源以前曾經存在過,但是現在已經被刪除了,那麼就應該使用 410 程式碼,而不是 404 。如果你不是在資料庫中把文件永久地刪除,而只是給 文件打了一個刪除標記,那麼請為使用者考慮,應當使用 410 程式碼,並顯示資訊 告知使用者要找的東西已經刪除。

500 Internal Server Error

這個程式碼通常表示程式出錯或伺服器過載。強烈建議把這個頁面弄得友好一點, 因為你的應用 遲早

 會出現故障的(參見 應用錯誤處理 )。

出錯處理器

一個出錯處理器是一個返回響應的函式,就像一個檢視函式類似。不同之處在於出錯 處理器在某類錯誤引發時作出響應,而檢視在發生 URL 匹配的請求時作出響應。 出錯處理器傳遞錯誤錯誤例項,大多數情況是一個HTTPException 。但是處理 “ 500 Internal Server Error ”的處理器除了 500 錯誤外還會傳遞未捕獲的異常。

響應的程式碼不會被設定為處理器的程式碼。因此請確保在從處理器返回響應時,提供恰 當的 HTTP 狀態程式碼。

“500 Internal Server Error” 的出錯處理器在除錯模式下不會啟用,而會顯示互動 偵錯程式。

以下是一個處理 “404 Page Not Found” 異常的示例:

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

使用 工廠模式 的話:

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