Gå til innhold

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:

1
2
3
4
5
6
7
@app.route('/sum/<num1>/<num2>')
def sum_nums(num1, num2):
    # Convert to int
    num1 = int(num1)
    num2 = int(num2)
    result = num1 + num2
    return f'{num1} + {num2} = {result}!'

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?

1
2
3
@app.route('/calc/<equation>')
def calc(equation):
    ...
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.


11 måneder siden 11 måneder siden GitHub Sondre Grønås