jesteś tutaj�
207
Budowanie aplikacji WWW
Dekorowanie funkcji za pomocą ciągu URL
W kolejnym wierszu pojawia się nowy kawałek składni Pythona:
dekoratory
. Dekorator
funkcji, z którym mamy do czynienia w tym kodzie, dostosowuje działanie istniejącej
funkcji
bez konieczności zmiany jej kodu (tj. funkcji poddanej dekoracji).
Niewykluczone, że to ostatnie zdanie zechcesz przeczytać kilka razy.
W istocie dekoratory umożliwiają Ci wzięcie pewnego istniejącego kodu i dołożenie
do niego jakiegoś dodatkowego zachowania zgodnie z potrzebą. Dekoratory mogą
być używane zarówno w stosunku do klas, jak i funkcji, lecz stosuje się je przede
wszystkim do tych drugich, dlatego większość programistów Pythona określa je
mianem
dekoratorów funkcji
.
Przyjrzyjmy się dekoratorowi funkcji występującemu w kodzie naszej aplikacji WWW,
który bardzo łatwo jest znaleźć, ponieważ zaczyna się symbolem @, co pokazano poniżej.
from flask import Flask
app = Flask(__name__)
@app.route(‘/’)
def hello() -> str:
return ‘Witaj, świecie, tu Flask!’
app.run()
Tutaj znajduje się
dekorator funkcji, który
— jak każdy dekorator —
zaczyna się symbolem @.
To jest URL.
Mimo że da się tworzyć własne dekoratory funkcji (o czym będzie mowa w jednym z kolejnych
rozdziałów tej książki), teraz skoncentrujemy się wyłącznie na używaniu gotowych. W języku Python
istnieje mnóstwo wbudowanych dekoratorów, a wiele modułów pochodzących z niezależnych źródeł
(takich jak właśnie Flask) zapewnia dekoratory specjalnego zastosowania (jednym z nich jest
route
).
Kod Twojej aplikacji WWW może uzyskać dostęp do zapewnianego przez framework Flask dekoratora
route
za pośrednictwem zmiennej
app
, która została utworzona w poprzednim wierszu programu.
Dekorator
route
umożliwia powiązanie ścieżki sieciowej URL z istniejącą funkcją Pythona. W tym
przypadku URL o postaci „/” został powiązany z funkcją o nazwie
hello
zdefiniowaną w kolejnym
wierszu kodu. Dekorator
route
sprawia, że serwer WWW Flask wywołuje tę funkcję, gdy serwer
ten otrzyma żądanie URL-a „/”. Dekorator czeka wówczas na wynik wytworzony przez dekorowaną
funkcję, a następnie zwraca dane wyjściowe do serwera, który z kolei przekazuje je do oczekującej
przeglądarki internetowej.
Nie musimy znać sposobu, w jaki Flask (oraz dekorator
route
) czyni całą opisaną powyżej „magię”.
Ważne jest, że framework robi to dla nas, a my musimy jedynie napisać funkcję, która zwraca
potrzebny nam wynik. O resztę dbają już Flask i dekorator
route
.
Dekorator
funkcji
dostosowuje
zachowanie
istniejącej
funkcji (bez
modyfikowania
jej kodu).
Porady maniaka
Stosowana w Pythonie składnia
dekoratorów została zainspirowana
używaną w języku Java składnią
adnotacji, jak również konstrukcjami
wykorzystywanymi w świecie
programowania funkcyjnego.
Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.