Flask lernen: Mein Lernnotizbuch

Ich lerne Flask. Dieser Artikel dient mir dabei als Notizbuch zum besseren Lernen und darf gerne mitgelesen werden.

Über Flask

Hier sollen einige grundlegende Fragen rund um Flask geklärt werden.

Was ist Flask?

Flask ist ein Python-Framework und wird verwendet, um Webanwendungen zu entwickeln. Flask ist dabei absichtlich nicht für sich allein nutzbar. Die Stärke des Frameworks liegt darin, nach Bedarf um Funktionen erweitert werden zu können – je nachdem, was man für das jeweilige Projekt braucht.

Für welche Art von Websites ist Flask gedacht?

Mit Flask lassen sich recht einfache Websites, ebenso aber komplexe Projekte umsetzen. Wichtig ist jedoch zu verstehen, dass man Programmierkenntnisse haben muss, um mit Flask zu arbeiten. Es ist nicht so einfach wie WordPress oder ein vergleichbares CMS.

Was brauche ich, um Flask-Apps zu erstellen?

Einen Editor

Dafür braucht es einen Editor. Ich verwende Visual Studio Code von Microsoft. Die Software ist kostenfrei und bietet eine breite Auswahl an Funktionen und Erweiterungen. Eine Alternative könnte PyCharm sein.

Python-, HTML- und CSS-Kenntnisse

Da Flask ein Python-Framework ist, benötigt ein Programmierer, der damit arbeiten möchte, Python-Kenntnisse. Doch damit nicht genug. Flask erlaubt das Erstellen der Website. Auch wenn viel in Flask über Python geschieht, braucht es für die Struktur und das Aussehen die üblichen Programmiersprachen HTML und CSS. Letzteres ist nicht zwingend erforderlich, aber sinnvoll.

Lernnotizen

Eine Flask-App einrichten

Flask ist eine Python Library (wie auch z.B. Pandas oder NumPy). Sie lässt sich importieren über:

from flask import Flask

Nach dem Import lässt sich eine Instanz definieren, diese wird der Variable app zugeteilt:

app = Flask(__name__)

Jetzt kann eine sogenannte Route definiert werden. Diese erklärt, welcher Inhalt der Flask-App unter welcher URL erreicht werden kann. Für die Startseite (erreicht unter www.website.de/) würde dies z.B. so aussehen und würde „Hello, World!“ ausgeben:

@app.route('/')
def home():
   return 'Hello, World!'

Mit dieser Methode können auch mehrere URLs an einen Inhalt gebunden werden. Das sieht dann z.B. so aus:

@app.route('/')
@app.route('/start')
@app.route('/willkommen')
def home():
   return 'Hello, World!'

HTML in Flask integrieren

Für die Darstellung vieler Inhalte wird HTML verwendet. Flask erlaubt dieses mit zu integrieren und damit Inhalte auf einer Website anzuzeigen. Das würde z.B. so aussehen, um den Text „Hello, World!“ als eine H1 auszugeben:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
   return '<h1>Hello, World!</h1>'

Mit drei Anführungszeiten lässt sich so auch HTML über mehrere Zeilen schreiben:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
   return '''
   <h1>Hello, World!</h1>
   <p>Das ist ein Absatz.</p>
   '''

URLs mit Variablen verwenden

Während bislang feste URLs verwendet wurden, kann Flask ebenso mit variablen URLs arbeiten. Das ist sinnvoll, um Seiten mit ähnlichen Strukturen darzustellen (z.B. Produktseiten, die zwar wechselnde Bilder und Texte haben, aber eine ähnliche Struktur besitzen). Das geht durch die Verwendung von

<name_der_variable>

Das würde in einer Route so aussehen:

@app.route('/produkte/<productname>')
def product(productname):
   return f'''
   <h1>{productname}</h1>
   '''

<int:variablennummer>

Es können auch die Typen von Variablen mit in die URL übergeben werden. So würde z.B. int (Für Integer) Zahlen akzeptieren. Es werden unterstützt:

  • int
  • float
  • path
  • string
  • uuid

Das würde in einer Route so aussehen:

@app.route('/produkte/<int:product_id>')
def product(product_id):
   return f'''
   <h1>Mein Produkt</h1>
   <p>Produktnummer: {product_id}
   '''

Mit Flask-Templates arbeiten

Wozu braucht es Templates in Flask?

Während bei der Entwicklung mit Flask Variablen verwendet wird, braucht es für die Nutzung im Alltag lesbaren HTML-Code. Hier kommt Jinja ins Spiel. Die Engine übernimmt die Aufgabe aus Python-Code HTML-Seiten zu erstellen. Diese beinhalten dann statt Variablen den eigentlichen Inhalt.

Das bedeutet, dass nicht mehr alle Inhalte einer Website direkt unter den Routen gepflegt werden, sondern es separate HTML-Dateien gibt. In diesen HTML-Dateien kann dann mit Variablen gearbeitet werden.

Wie Templates in Flask abgerufen werden können

Damit die Templates in Flask erstellt werden können, muss die dazugehörige Funktion (render_template) erstmal importiert werden. Dadurch sieht die erste Zeile in der Flask-App so aus:

from flask import Flask, render_template

Anschließend kann die Funktion in einer Route verwendet werden. Das kann z.B. so aussehen:

@app.route('/')
def index():
   return render_template('index.html')

Mit dieser Funktion wird der App erklärt: Wenn jemand die Startseite der Website aufruft, greife auf das Template zurück, das unter templates/index.html hinterlegt ist.

Variablen in Templates integrieren

Um z.B. ein Template an mehreren Stellen nutzen zu können (z.B. für Produktseiten eines Online-Shops), können in den Template Variablen hinterlegt werden. Dafür muss die Funktion render_templates um Variablen erweitert werden. Diese Variablen können dann in dem Template verwendet werden. Das sieht z.B. so aus:

@app.route('/')
def index():
   return render_template('index.html', 
                         variable_im_template_1 = "eine variable",
                         variable_im_template_2 = 2)

Ist die Variable in der Route definiert und mitgegeben, kann sie im Template abgerufen werden. Das ist möglich, indem die Variable mit {{ }} umrahmt wird. Das kann z.B. so aussehen:

<h1> Ein Artikel über die Zahl {{ variable_im_template_2 }}</h1>

In diesem Fall wäre der Inhalt: Ein Artikel über die Zahl 2.

In diesem Rahmen kann auch gearbeitet werden. So ist z.B. das hier möglich:

<h1> Ein Artikel über die Zahl {{ variable_im_template_2 + 1}}</h1>

In diesem Fall wäre der Inhalt: Ein Artikel über die Zahl 3.

Variablen mit Filter bearbeiten

Es gibt einige Möglichkeiten, um Variablen in einer HTML-Datei zu bearbeiten. Um das zu tun erweitert man eine Variable mit einem vertikalen Strich ( | ) und gibt dahinter den dazugehörigen Filter an. Das kann z.B. so aussehen:

<h1> Ein Artikel über {{ variable_im_template_1 | title }}</h1>

Der Filter „title“ passt den String so an, dass der Anfangsbuchstabe jedes Wortes groß geschrieben wird. In diesem Beispiel wäre das Ergebnis also „Ein Artikel über Eine Variable“.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert