Introduksjon til Flask
Installer Flask
For at du skal slippe å knote for mye med installering og oppsett av Flask har vi laget en utvidelse i VS-Code, denne heter Flask-vgs
. Start med å installere denne.
I VS Code ligger utvidelser under ikonet med fire firkanter på menyen til venstre.
Lag en ny mappe i VS Code, høyreklikk på mappen og velg Create Flask
. Installasjonen kan ta ett minutt eller to, så smør deg med tålmodighet.
Hele Flask-mappa du nå har opprettet tilsvarer filer og mapper som i virkeligheten ligger på en ekstern server, og for oss er de viktigste app.py
og templates/index.html
. Førstnevnte er selve sentralen eller "hjernen" til nettstedet vårt altså fila som håndterer alle kommunikasjon med brukere av nettstedet. Det er her vi skal skrive serverkoden vår. I templates-mappa legger vi alle html-filene våre, der ligger skjelettet til forsiden vår allerede.
Ruter
Når vi kjører Flask-prosjektet ("serveren") så får vi tilgang til en URL/lenke. Denne er ikke lenger direkte koblet til en nettside, men sender en forespørsel til app.py som leverer forsiden tilbake til nettleseren vår. Dette kalles for en rute
. Ruten til forsiden vår er allerede laget, og det er bestemt at den skal kalles for "/"
. Vi ser følgende kode i app.py:
from flask import Flask, render_template
@app.route("/")
def index():
return render_template("index.html")
Dette er den enkleste ruten vi kan lage, det er en python-funksjon som kjører dersom noen sender forespørselen "/"
til serveren, som betyr at de ønsker å besøke forsiden. Funksjonen returnerer da selve nettsiden tilbake slik at nettleseren kan vise innholdet til index.html. Nettsiden i seg selv kan vi lage akkurat på samme måte som tidligere, med et lite unntak. Alle filer som hører med, altså bilder, videoer, css-filer og liknende skal ligge i en mappe kalt static
. Denne lager vi selv, og må være på samme nivå som templates-mappa.
Oppsummert har vi fra starten app.py med en fungerende rute til forsiden index.html. Vi kan legge på bilder og css for å gjøre forsiden penere, og må da passe på å legge alle filer i en egen mappe vi kaller for "static". Når vi jobber med å bygge forsiden vår vil vi på et eller annet tidspunkt trolig ønske å lenke til en ny side. Vi lager en ny html-fil som vi lagrer i "templates", for eksempel nyside.thml
og ønsker å lage et a-element på forsiden så vi kan koble til den nye nettsiden.
Vi kan ikke lenger lage lenken til som før: <a href="nyside.html>Les mer her</a>
fordi det forutsetter at brukeren har lastet ned nyside.html på forhånd. Vi må altså i stedet lage en rute
. Navnet på ruta bestemmer vi selv, for eksempel kan vi skrive <a href="/nyside">Les mer her</a>
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask - VGS</title>
</head>
<body>
<h1>Hallo, Verden!</h1>
<a href="/nyside">Les mer her</a>
</body>
</html>
Vi har nå kalt ruten vår for nyside
og bruker /
for å indikere at nyside skal legge seg bak på nettsidens adresse. Neste steg er da å gå til app.py, slik at vi kan kode ferdig ruten "/nyside"
:
from flask import Flask, render_template # importerer det som trengs fra Flask-biblioteket
app = Flask(__name__) # oppretter en `Flask`-app, som lagres i variabelen `app`
@app.route("/") # Allerede eksisterende rute til forsiden vår
def index():
return render_template("index.html")
@app.route("/nyside") # Her skriver vi ruta til vår nye nettside på samme måte
def side2():
return render_template("nyside.html")
@app.route("/")
lager altså en rute på nettadressen, og bestemmes av det som returneres av funksjonen under. Ruten"/"
tilsvarer nettadressenhttp://127.0.0.1:5000/
som er den Flask har laget til nettstedet vårt. Vår nye rute vil dermed tilsvare nettadressenhttp://127.0.0.1:5000/nyside
return render_template("nyside.html")
, returnerer html-filennyside.html
. Med andre ord vi sendte"/nyside"
via href til app.py, da sendes nettsidennyside.html
tilbake. Denne interaksjonen mellom front-end og back-end tilsvarer nå en lenke mellom nettsidene våre.
Selv om vi fortsatt kjører alt fra samme datamaskin, later nå flask som at vi jobber opp mot en server ved å la applikasjonen bygge et såkalt "virtual enviroment". Slik kan vi se hvordan nettstedet ville ha fungert i virkeligheten. Dersom vi "skrur av" serveren (ctrl-c) så vil ikke nettsidene våre fungere lenger. Ved å høyreklikke på prosjektmappa og velge "Run Flask" så starter vi "serveren" og kan sjekke ut nettsidene våre igjen.
I app.py
skrives Python-koden til applikasjonen.
Koden som skrives her er koden til serveren, slik kode kalles ofte back-end, fordi
denne koden ligger bak og brukeren aldri ser denne koden.