本篇文章將介紹修飾器,在這之前我們先說明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")
|
執行結果: