Flask 自定義錯誤頁面

2021-08-11 10:32 更新

Flask 自帶了很順手的 abort() 函數用于以一個 HTTP 失敗代碼 中斷一個請求,他也會提供一個非常簡單的錯誤頁面,用于提供一些基礎的描述。 這個頁面太樸素了以至于缺乏一點靈氣。

依賴于錯誤代碼的不同,用戶看到某個錯誤的可能性大小也不同。

通常的錯誤代碼

下面列出了一些用戶經常遇到的錯誤代碼,即使在這個應用準確無誤的情況下也可能發(fā)生:

404 Not Found
經典的“哎呦,您輸入的 URL 當中有錯誤”消息。這個消息太常見了,即使是 互聯(lián)網的新手也知道 404 代號的意義: 該死,我尋找的東西不在那兒。確保 404 頁面上有一些有用的信息是一個好主意,至少應該提供一個返回主頁的鏈接。
403 Forbidden
如果您的網站包含一些類型的訪問控制,您必須向非法的請求返回 403 錯誤代號。 所以請確保用戶不會在試圖訪問了一個禁止訪問的資源后不知所措。
410 Gone
您知道 404 Not Found 代號還有一個兄弟名為 410 Gone 么? 很少有人真正實現 它,您可以考慮將其返回給對以前曾經存在、但是現在已經刪除的資源的請求,而 不是直接返回 404 。 如果您還沒有從數據庫里永久刪除這個文檔,僅僅是將他們 標記為刪除。那么可以為用戶展示一個消息,說明他們尋找的東西已經永遠刪除了。
500 Internal Server Error
通常在出現編程錯誤或者服務器過載的時候會返回這個錯誤代號。在這里放一個 漂亮的頁面是一個非常好的主意。因為您的應用 總有一天 會出現錯誤(請參考 記錄應用錯誤 )

錯誤處理器

一個錯誤處理器是一個類似于視圖函數的函數,但是它在錯誤發(fā)生時被執(zhí)行,并且 錯誤被當成一個參數傳遞進來。一般來說錯誤可能是 HTTPException , 但是在有些情況下會是其他錯誤: 內部服務器的錯誤的處理器在被執(zhí)行時,將會 同時得到被捕捉到的實際代碼錯誤作為參數。

錯誤處理器和要捕捉的錯誤代碼使用 errorhandler() 裝飾器注冊。 請記住 Flask 不會 替您設置錯誤代碼,所以請確保在返回 response 對象時,提供了 對應的 HTTP 狀態(tài)代碼。

如下實現了一個 “404 Page Not Found” 錯誤處理的例子:

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


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號