# Python Flask實作_開始建置頁面內容_06_UserInfo_如何處理abort ###### tags: `python` `flask` `blog` `abort` ## 說明 [abort中文說明](http://docs.jinkan.org/docs/flask/patterns/errorpages.html) 在上一節的討論中,我們第一次使用了abort這個拋出Http狀態,官方的說明如此:『Raises an `HTTPException` for the given status code or WSGI application:』 我們會在這節討論中簡單的說明如何自定義相關頁面。 ## 作業說明 在導入blueprint之前,我們可以透過裝飾器@errorhandler來補抓,但導入blueprint之後,如同@before_quest變更為@before_app_quest一樣,必需調整為@app_errorhandler,否則補抓到的就只會該是blueprint所在域的異常。 我們將異常的部份另外設置一個python文件統一放置。 :::success * 文件:app_blog\main\errorhandler.py * 說明:設置一個異常補捉的文件 ```python= from flask import render_template from . import main @main.app_errorhandler(404) def page_not_found(e): """ 自定義異常頁面,範例可於官網取得 """ return render_template('404.html'), 404 ``` 第2行:import blueprint 第4行:範例取自官網 ::: 我們需要讓blueprint也認識這個文件,所以要在初始化的時候加入 :::success * 文件:app_blog\main\\_\_init\_\_.py * 說明:將自定義異常的文件加入blueprint ```python= from flask import Blueprint # 定義 main = Blueprint('main', __name__) # 關聯 from . import view, errorhandler ``` ::: 最後只要再加入一個404的html文件,上面放上一個轉index的連結 :::success * 文件:templates\404.html * 說明:新增一個404頁面 ```htmlmixed= {% extends "base.html" %} {% block title %}404{% endblock %} {% block page_content %} <div class="page-header"> <h1>PAGE NOT FOUND</h1> <h2>GO BACK TO INDEX </h2> <a href="{{ url_for('main.index') }}">INDEX</a> </div> {% endblock %} ``` ::: :::warning * 測試 * 說明:利用查詢作者的route故意查不存在的username * http://127.0.0.1:5000/main/userinfo/Shaoe.chena ![](https://i.imgur.com/IbWlsL8.png) ::: ## 總結 我們順利的在main這個blueprint中掛上一個全域的404自定義異常畫面,要記得,文件加入雖然import了blueprint,但這時候blueprint並不認識這個自定義異常的文件,一定要到初始化的地方設置關聯。 當然,除此之外還可以自定義其它的異常,這部份可以以同樣的方式實作,差別在於狀態碼,不明白的部份可以參考官方文件以及查詢相關Http狀態碼說明。