Dynamické odpovede servera
Z Flaskovej funkcie môžeme vrátiť hocičo, nielen statický reťazec. Napríklad môžeme vrátiť hodnotu premennej.
answer_to_life = 42
@app.route('/')
def hello_world():
return answer_to_life
Vráti, podľa očakávania, 42
.
Premenná však nemusí byť len konštantná. Môže to byť aj výsledok volania funkcie, napríklad +
.
two_plus_two_minus_one = 2 + 2 - 1
@app.route('/')
def hello_world():
return two_plus_two_minus_one
Vráti, podľa očakávania, 3
.
Čas
Dokonca môžeme vrátiť aktuálny čas!
from datetime import datetime
teraz = datetime.now()
@app.route('/')
def hello_world():
return 'Teraz je ' + str(teraz)
Dostaneme niečo podobné ako Teraz je 2017-12-19 09:11:10.098904
. Ak sa však pokúsime obnoviť stránku, dostaneme stále ten istý výsledok, nie aktuálny čas.
Problém je, že naša teraz
sa priraďuje hodnota mimo hello_world()
a priradenie prebehne len raz, a to v čase spustenia servera. Ak by sme chceli vrátiť aktuálny čas, museli by sme teraz
zavolať pri každom zobrazení stránky. kde to teda urobiť?
hello_world()
sa zavolá pri každom načítaní stránky, tam teda budeme priraďovať hodnotu teraz
.
@app.route('/')
def hello_world():
teraz = datetime.now()
return 'Teraz je ' + str(teraz)
Teraz sa správny čas zobrazí aj pri obnovení stránky.
Úloha:
Naformátuj výstup funkcie
hello_world()
tak, aby bol vo formáte:Dnes je <deň>.<mesiac>.<rok>. Aktuálny čas je <hodina>:<minúta>:<sekunda>.
Ukážkový program nájdeš na Githube [datetime_formatted].
Podmienený výpis
hello_world()
je funkcia ako každá iná, preto nám nič nebráni používať hocijaké Python konštrukcie.
Program, čo vypíše OBED!
na pravé poludnie, v ostatných prípadoch PRACUJ!
.
def hello_world():
teraz = datetime.now()
if teraz.hour == 12 and teraz.minute == 0:
return 'OBED!'
else:
return 'PRACUJ!'
Úloha:
Zmeň
hello_world()
tak, aby stránka vypísala, čo akurát robíš.
Napríklad:
- od 23:00 - 6:00 spíš,
- od 6:01 po 14:00 si v škole
- od 14:01 po 14:30 obeduješ
- a medzi 14:31 a 23:00 pracuješ na ovládnutí sveta.
Ukážkový program opäť nájdeš na Githube [world_domination].