本篇文章將介紹修飾器,在這之前我們先說明Flask網站設計。
第一次看到Python微型網站框架Flask的程式,心中就有一種感覺,為何短短6行指令就能建構出網站的框架?
1 2 3 4 5 6 7 8 | from flask import Flask, escape, request app = Flask(__name__) @app.route('/') def hello(): name = request.args.get("name", "World") return f'Hello, {escape(name)}!' |
第一行程式大家都很熟悉的flask套件ask套件匯入三個元件Flask, escape, request,Flask用來建立flask的微型網站(第三行),request則是用來取得瀏覽器所送來的參數"name"(第七行),若無則預設為"world",escape則是用來處理脫逸符號(第八行),如:'<'和'>'等。
不過上面程式執行後並沒有結果,必須在加上主程式。
1 2 3 4 5 6 7 8 9 10 11 | from flask import Flask, escape, request app = Flask(__name__) @app.route('/') def hello(): name = request.args.get("name", "World") return f'Hello, {escape(name)}!' if __name__ == "__main__": app.run() |
如上圖中的第11行,app.run(),啟動Flask物件的執行,請在命令列cmd上執行本範例。
執行127.0.0.1:500即可看到結果。
執行結果:
測試一下夾帶參數,注意在下圖網址欄中輸入參數。
查看一下命令列的訊
接下來我們來說明程式第五行
@app.route('/')
這是使用修飾器(Decorator)中的語法糖(Syntactic Sugar),就能夠把網址和想要執行函式挷定,以本範例為例,當使用者僅輸入127.0.0.1:5000時,表示要啟動首頁,這時就會呼叫hello()函式。
以下我們使用一個範例來說明修飾器的語法糖,當我們呼叫myfunc函式時,會把myfunc函式包括修飾器所指定的函式,用這種作法的好處是很容易實現框架,因為框架是先被設計出來,而網頁函式是較晚才被設計出來,如何讓以前的程式來叫未來函式,這種做法是不是很像魔法師中的魔法棒。
1 2 3 4 5 6 7 8 9 10 11 12 | def decorate(func): def wrapper_func(*arg): print("執行前") func(*arg) print("執行後") return wrapper_func @decorate def myfunc(parameter): print(parameter) myfunc("Hello") |
執行結果:
沒有留言:
張貼留言