Gå til innhold

1. Hva er Flask

Flask er et web applikasjons rammeverk som lar deg utvikle webapplikasjoner på en enkel måte. Flask kan brukes til å lage dynamiske nettsider, eller API‘er hvor applikasjonen lagrer og henter data.

Den korteste forklaringen er at Flask er en webserver som utfører Python kode før og eventuelt etter en HTTP forespørsel, som kan endre utfallet av HTML koden som sendes. (Se Templating).

Flask, som de fleste applikasjoner, trenger å kjøre på en server for å kunne være tilgjengelig. Det vil si at en maskin må kjøre Flask for at den skal kunne ‘brukes av andre’. Hvordan brukere besøker Flask applikasjonen kan variere, de fleste velger å kjøre den gjennom nettleser, men den kan òg forvandles til en mobilapp.

Du kan gjøre mye med Flask. Vi bruker det blant annet på skolen til å generere etiketter som sendes til printere, til å holde styr på utstyrsrommet, og kunne like så godt brukt det til å styre lysene i klasserommet via mobilen.

Webapplikasjon vs Webserver

Merk at ordet applikasjon ikke er det samme som nettside, selv om begge leses gjennom en nettleser.

Dette er fordi en nettside er HTML, mens en webapplikasjon er en app som kan genere / sende ut HTML. Dersom man kun skal tjene en nettside, vil en statisk webserver være en bedre løsning enn en applikasjonsserver.

Hvorfor Flask

Flask byr på en rekke funksjoner når en skal utvikle en webapplikasjon, noen av dem vil du lære i denne modulen. Flask er mye brukt i verden og det finnes ressurser på nettet til det meste!

Ressurser på nettet

Flask har både nybegynnere og proffbrukere, ressurser du finner om Flask på nettet kan derfor ofte stå skrevet i språket SuperNerd, men fortvil ikke, det finnes mange veier til Rom!

Noen eksempler på nyttige funksjoner samt bruksområde med en kort forklaring. Forklaringene vil du bli bedre kjent med etter hvert (merk at du dog kan google dem! Flask + funksjon 😄):

Routing

Mulighet til å opprette dynamiske URLer, med unikt innhold. For eksempel /minside, eller /konto/<id>. (/sider/side2.html -> /side2 (selv om webservere kan automatisere denne prosessen))

Redirects og feilmeldinger

Som de fleste nettsider kan man bruke statuskoder til å representere feilmeldinger, hvor enkelte er innebygde. For eksempel 404 Not Found er en innebygd route som dukker opp når ressursen ikke finnes, eller man kan gjøre en flask.abort(403) for å vise en “403 Access Denied” side, og avbryte koden som ville blitt kjørt dersom ressursen egentlig krever at bruker er logget inn.

Logging & Debugging

Alle Flask forespørsler loggfører automatisk aktivitet slik at det er enkelt å se hvilken aktivitet som foregår, og hvilke feilmeldinger som eventuelt gjelder. Flask har også en innebygget Debug mode som viser feilmeldinger i stedet for å krasje programmet.

Static File hosting

Flask kan tjene filer ved behov (CSS, JavaScript, bilder, ikoner). Disse lagres i en egen mappe, hvor alt er offentlig tilgjengelig (man bør derfor ikke lagre sensitiv data her).

Templating

Jinja2 Templating som lar deg “programmere i HTML” (Rettere sagt: programmere et tekstdokument).

Hei {{ user.name }}! -> Hei Sondre!

Server Side Rendering

Serveren behandler alt innhold, mindre sikkerhetsutfordringer da serveren står ansvarlig for å hente ressurser; ikke brukeren. (Brukeren får mindre kontroll over systemet, som reduserer risiko for angrep)

Sessions

Sessions er en metode å trygt lagre data om en klient (en bruker som besøker nettsiden) på serveren, uten at bruker har tilgang til dette. is_logged_in som session verdi kan brukes til å identifisere brukere som er innlogget fra serveren. I motsetning til en Cookie, kan Sessions kun redigeres av server. (Sikrere)

Cookies

Det er enkelt å opprette Cookies, som lagres i nettleseren til klient. Cookies er data om brukeren som kan brukes direkte av Flask. For eksempel kan informasjon om historikk ligge lokalt i nettleseren til bruker, i stedet for å ligge lagret hos en server.

OBS om Cookies

Cookies kan styres av alle brukere, det vil si de kan enkelt redigeres. Man bør kun bruke Cookies til ikke-sensitiv data, for eksempel prefers_dark_mode eller profile_picture. is_logged_in bør håndteres på serveren sin side (via en Session)


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