iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
Modern Web

Willisの後端幼幼班系列 第 18

後端幼幼班Day18 Flask篇 網頁錯誤處理

  • 分享至 

  • xImage
  •  

大家好~我是Willis,今天又要介紹網頁錯誤處理囉,GO ! GO ! ⁽⁽◟(∗ ˊωˋ ∗)◞ ⁾⁾

錯誤註冊

狀態碼

Flask中發生錯誤時,會返回一個HTTP狀態碼。狀態碼400-499表示客戶端的請求數據或者與之相關的錯誤,500-599表示服務器或應用本身的錯誤。

詳細HTTP碼資訊

狀態碼 : 404 Not found

代表著服務器找不到請求資源,在瀏覽器中意味著無法識別URL,在API中意味著端點有效但資源本身不存在。

@app.errorhandler(狀態碼)

  • 把 Day16 文章的專案架構拿來使用吧

  • 程式碼 app.py

from flask import Flask, render_template

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route("/")
def index():
    return render_template('index.html')  # 根目錄首頁


@app.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404  # 錯誤回傳


if __name__ == "__main__":
    app.run()
  • 執行結果

產生錯誤

abort(狀態碼)

  • 把 Day17 文章的專案架構拿來使用吧

  • 程式碼 app.py

from flask import Flask, request, render_template, abort
# 導入模組 request, render_template, abort

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route('/')
def login():
    return render_template('login.html')


@app.route("/hello", methods=['GET', 'POST'])
def hello():
    if request.method == 'POST':
        if request.values['username'] == "Willis":
            return 'Hello ' + request.values['username']
        else:
            abort(404)  # 產生錯誤404


@app.errorhandler(404)
def page_not_found(error):
    return 'This username {} does not exist'.format(request.values['username']), 404


if __name__ == '__main__':
    app.run()

  • username : Willis 執行結果

  • username : test 執行結果

自訂非標準HTTP錯誤代碼

  • 程式碼 app.py
from flask import Flask
# 導入模組 request, render_template, abort
import werkzeug  # 導入模組werkzeug

app = Flask(__name__)
app.config["DEBUG"] = True


class InsufficientStorage(werkzeug.exceptions.HTTPException):  # 自訂非標準HTTP錯誤代碼:1000
    code = 1000
    description = 'Not enough storage space.'


def handle_bad_request(error):  # 錯誤註冊
    return '錯誤代碼:1000', 1000


app.register_error_handler(InsufficientStorage, handle_bad_request)


@app.route('/')
def login():
    raise InsufficientStorage()  # 錯誤訊息


if __name__ == '__main__':
    app.run()
  • 執行結果

參考資料

https://dormousehole.readthedocs.io/en/latest/errorhandling.html

結尾

今天的Flask網頁錯誤處理就到這裡囉 ~ 下次見囉 ! ヾ(´︶`*)ノ♬


上一篇
後端幼幼班Day17 Flask篇 GET & POST
下一篇
後端幼幼班Day19 Flask篇 Cookie
系列文
Willisの後端幼幼班30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言