Ontwikkel een Python-applicatie met Flask!

Wanneer je net begonnen bent met Python, dan kan het bouwen van een webapplicatie best een uitdaging zijn. Gelukkig maakt Flask het een stuk eenvoudiger om een nieuwe applicatie werkend te krijgen. Graag leg ik je in een paar stappen uit hoe je dit aanpakt. Zo heb je binnen no time een webpagina draaiend!

Beginnen met Python: een applicatie maken met Flask.

Basisbenodigdheden

Python-ondersteuning is bij Antagonist beschikbaar vanaf het Plus-pakket. Kun je de Python-selector in het DirectAdmin-menu niet vinden, bekijk dan in Mijn Antagonist welk hostingpakket je hebt. Je kunt dat zien op de productpagina. Voor het installeren en testen van de Python-applicatie is het ook handig dat je weet hoe je een SSH-verbinding met je pakket kunt maken.

Let hier op voordat je begint

  • Met deze uitleg zet je direct op productie een applicatie op. Volg het alleen als je op jouw domein geen belangrijke website hebt draaien. Er bestaat een risico dat je de bestaande website beschadigt.
  • Deze uitleg is puur geschikt voor een testproject. Zorg dat je een nieuwe productiewebsite eerst lokaal of op een testomgeving bouwt.
  • Vul geen belangrijke (klant)informatie in deze testapplicatie in, voordat je begrijpt hoe de beveiliging werkt.

Een Flask-applicatie in 9 stappen


Stap 1. Maak een nieuwe Python-applicatie aan 

Maak een nieuwe applicatie aan via de Python-selector in DirectAdmin. Het is belangrijk dat je hier de nieuwste Python-versie selecteert. Op het moment van schrijven is dit versie 3.7.10, maar er komen natuurlijk regelmatig updates uit. De nieuwste versie herken je aan de tekst ‘recommended’ achter het versienummer. Kies een applicatienaam, een applicatie-URL en een naam voor het logbestand. Maak daarna de applicatie aan.

Maak een nieuwe applicatie aan in Python-selector.

Voor het eerst aan de gang met de Python-selector?
Leer meer over het aanmaken van een applicatie in de Python-selector.

Stap 2. Installeer Flask 

Na het opslaan van de nieuwe configuratie, zie je hoe je via SSH de virtualenv activeert en naar je projectmap navigeert. Eenmaal in de juiste virtualenv installeer je Flask heel eenvoudig via pip met de volgende code.

pip install Flask

Stap 3. Maak de basis voor een webpagina in Flask

Voor een eenvoudige webapplicatie met Flask heb je maar één bestand nodig. In dit voorbeeld zet ik onderstaande code in ‘app.py’ in de zojuist aangemaakte projectmap. In de code zie je de volgende acties:

  • het aanmaken van de Flask-applicatie;
  • het definiëren van een route voor het teruggeven van de tekst “Dit werkt!”;
  • het starten van de applicatie.
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Dit werkt!"

if __name__ == "__main__":
    app.run()

Stap 4. Laad de applicatie in bij Passenger 

Alle verzoeken die op onze servers binnenkomen voor Python-applicaties worden geserveerd door Phusion Passenger. Zorg daarom dat je Passenger op de hoogte stelt van het bestaan van de applicatie. Hiervoor kun je de code in ‘passenger_wsgi.py’ vervangen met: 

from app import app as application

Stap 5. Herstart je applicatie  

Je Flask-applicatie is nu klaar voor gebruik. Let op dat je wijzigingen pas zichtbaar worden, wanneer je de applicatie herstart in de Python-selector van DirectAdmin. Op deze manier laad je de actuele code opnieuw in.

Ontdek meer over Python

Leer meer over het deployen van applicaties, de Python-selector, het web framework Django en de vele andere mogelijkheden van Python.

Bekijk de artikelen →

Stap 6. Test je webpagina 

Als alles gelukt is, zie je nu als je jouw domein bezoekt de tekst “Dit werkt!” staan. Heb je in de Python-selector een subpad meegegeven, dan zie je de pagina onder dat pad. In ons voorbeeld is dit: voorbeeld.nl/flask/

Test je webpagina.

Stap 7. Voeg een SQLite-database toe aan de applicatie

Je wilt vast meer met je Flask-applicatie dan enkel een platte regel tekst. Het is dan handig als de applicatie data kan opslaan in een database. We breiden het voorbeeld uit met functionaliteit waarmee bezoekers zich kunnen registreren met hun voor- en achternaam. De data hiervoor wordt opgeslagen in een simpel SQLite-databasebestand. Het aanmaken van een nieuwe database en bezoekerstabel doe je met de volgende SSH commando’s:

sqlite3 sqlite.db
sqlite> CREATE TABLE bezoekers(id int primary key, voornaam varchar(64), achternaam varchar(64));

Stap 8. Voeg een bezoekerspagina toe 

Nu de database klaar staat, is het tijd om de app.py uit te breiden met een nieuwe pagina. Op deze pagina kun je jezelf toevoegen en zie je een overzicht met de bezoekers in de database. Hieronder volgt de gehele nieuwe app.py.

from flask import Flask, render_template, request
import sqlite3 as sql

app = Flask(__name__)

@app.route("/")
def home():
  return "Dit werkt!"

@app.route("/bezoekers", methods=['GET', 'POST'])
def bezoekers():
  with sql.connect("database.db") as con:
    if request.method == 'POST':
      voornaam = request.form['voornaam']
      achternaam = request.form['achternaam']

      cur = con.cursor()
      sql_insert = "INSERT INTO bezoekers (voornaam, achternaam) VALUES (?,?)"
      cur.execute(sql_insert, (voornaam, achternaam))
      con.commit()

    con.row_factory = sql.Row
    cur = con.cursor()
    cur.execute("select * from bezoekers")
    rows = cur.fetchall()

  return render_template("bezoekers.html", rows=rows)

if __name__ == "__main__":
  app.run()

Zoals je ziet, is onder andere de nieuwe route ‘bezoekers’ toegevoegd. Deze verbindt met onze zojuist aangemaakte database. Er wordt een overzicht van eventueel bestaande bezoekers uit de database opgehaald. In het geval van een POST request wordt er tevens een nieuwe rij opgeslagen met daarin de voor- en achternaam die opgestuurd is.

De database queries worden uitgevoerd met behulp van de sqlite3-module. Deze is standaard onderdeel van Python 3 en hoef je dus niet te installeren met pip. Omdat de pagina wat uitgebreider is dan een simpele zin, staat deze gedefinieerd in een apart HTML-template.

Flask leest de templates standaard uit een map met de naam ‘templates’. Om dit te laten werken, maak je een nieuw bestand ‘bezoekers.html’ aan in een nieuwe map genaamd ‘templates’:

<!doctype html>
<html>
   <head><title>Bezoekers</title></head>
   <body>
      <h2>Bezoekers</h2>
      <table>
         <thead>
            <tr>
                <th>Voornaam</th>
                <th>Achternaam</th>
            </tr>
         </thead>
         {% for row in rows %}
            <tr>
               <td>{{row["voornaam"]}}</td>
               <td>{{row["achternaam"]}}</td>
            </tr>
         {% endfor %}
      </table>
      <h2>Bezoeker toevoegen</h2>
      <form method="POST">
          <label for="voornaam">Voornaam</label><input type="text" id="voornaam" name="voornaam"/><br/>
          <label for="achternaam">Achternaam</label><input type="text" id="achternaam" name="achternaam"/><br/>
          <input type="submit" name="submit" value="Opslaan"/>
      </form>
   </body>
</html>

Stap 9. Test je bezoekerspagina 

Vergeet niet de applicatie te herstarten, zodat de laatste wijzigingen worden ingeladen. Open vervolgens de bezoekerpagina. Je ziet daarin nu een overzicht met eventuele bezoekers en een formulier voor het toevoegen van een nieuwe bezoeker.

Test de bezoekerspagina van je Flask-applicatie.

Veel succes!

Gefeliciteerd, je hebt nu een Flask-applicatie gemaakt! De pagina biedt een goede basis, waarmee je zelf verder aan de slag kunt. Misschien wil je het geheel mooi stylen met CSS of heb je leuke nieuwe functionaliteiten in gedachten. Wat je plannen ook zijn, ik wens je veel succes met de uitvoering!

P.S. Op de hoogte blijven van alle artikelen, updates, tips en trucs die op ons blog verschijnen? Volg ons via Facebook, Twitter, Instagram, RSS en e-mail!

Deel App Tweet Mail Deel

2 thoughts on “Ontwikkel een Python-applicatie met Flask!

  1. T. de Lange op zei:

    Hi,

    Ik heb alles t/m stap 5 meerdere malen doorlopen maar ik blijf landen op een 404 pagina. De application url staat op /flask. Voor de rest heb ik alles precies volgens jullie voorbeeld ingesteld. Wat kan er misgaan?

    • Hi, leuk dat je aan de slag bent gegaan! Om de exacte oorzaak te achterhalen, hebben we iets meer context nodig. Zou je een e-mail naar support@antagonist.nl willen sturen met daarin dat het naar aanleiding van dit blog is? Als je daar ook het deb-nummer van je pakket en de domeinnaam benoemt, dan we kunnen gerichter met je meekijken. Alvast bedankt!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *