Flask 自定義錯(cuò)誤頁(yè)面

2021-08-11 10:32 更新

Flask 自帶了很順手的 abort() 函數(shù)用于以一個(gè) HTTP 失敗代碼 中斷一個(gè)請(qǐng)求,他也會(huì)提供一個(gè)非常簡(jiǎn)單的錯(cuò)誤頁(yè)面,用于提供一些基礎(chǔ)的描述。 這個(gè)頁(yè)面太樸素了以至于缺乏一點(diǎn)靈氣。

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

通常的錯(cuò)誤代碼

下面列出了一些用戶經(jīng)常遇到的錯(cuò)誤代碼,即使在這個(gè)應(yīng)用準(zhǔn)確無(wú)誤的情況下也可能發(fā)生:

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

錯(cuò)誤處理器

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

錯(cuò)誤處理器和要捕捉的錯(cuò)誤代碼使用 errorhandler() 裝飾器注冊(cè)。 請(qǐng)記住 Flask 不會(huì) 替您設(shè)置錯(cuò)誤代碼,所以請(qǐng)確保在返回 response 對(duì)象時(shí),提供了 對(duì)應(yīng)的 HTTP 狀態(tài)代碼。

如下實(shí)現(xiàn)了一個(gè) “404 Page Not Found” 錯(cuò)誤處理的例子:

from flask import render_template

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

一個(gè)示例模板可能會(huì)如下所示:

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


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)