3. Flask Funksjoner
I forrige eksempel brukte vi noen Flask routes til å returnere tekst basert på en navneverdi, men vi kunne like gjerne kjørt funksjoner før teksten returneres!
Server Side Rendering og ‘treghet’
Når man kjører kode før return
blir brukt, risikerer man at bruker må vente til funksjonen er ferdig med å utføre, som er den største utfordringen med Server Side Rendering (SSR), så det er viktig å tenke at man ikke gjør for mye unødvendig kode som kjører tregt.
Summer tall
La oss begynne med et enkelt eksempel, en route som summerer sammen tall!
Merk at dette kan gjøres på mange forskjellige måter, i dette eksempelet vil vi bruke routes til å utføre handlingen:
For å teste ut koden, kan du besøke http://127.0.0.1:5000/sum/3/6
.
Feilhåndtering
Test også ut å gi Flask noe annet enn tall, for eksempel /sum/a/b
, dette vil resultere i en feilmelding. Løsningen er altså ikke feilfri. Klarer du å kombinere kunnskapen fra modulen om feilhåndtering til å heller returnere “Kunne ikke summere tall, ugyldig data oppgitt”?
Utfordring
Klarer du å lage tilsvarende sider for andre matematiske operasjoner? Eventuelt lage en kalkulator som bruker følgende route?
Server Side Funksjoner & sikkerhet
Mange ressurser på nettet vil anbefale deg å løse utfordringen ved å bruke eval(equation)
. Dette må du gjerne prøve, men se hva som skjer når du da besøker følgende nettside: http://127.0.0.1/calc/__import__('os').system('calc')
En uheldig faktum er at alt som gjøres på serversiden krever litt ekstra forbehold om sikkerhetstiltak der funksjonene interagerer med systemet. XSS injections (injisering av uønsket kode) er dessverre den letteste veien for angripere inn i systemer.
Heldigvis finnes det mange (innebygde) ressurser som hjelper til med akkurat dette, se for eksempel https://flask.palletsprojects.com/en/2.3.x/quickstart/#html-escaping. Er du usikker på om applikasjonen din er ‘trygg nok’ så bør du høre med noen kyndige før du publiserer din applikasjon.