In meiner neuen Beitragsserie auf diesem Blog, möchte ich dir das Web Framework Flask für Python vorstellen.
Bevor wir jedoch die ersten Programme schreiben, möchte ich dir kurz erläutern was Flask ist und was du für die Programmierung benötigst. Nachdem diese Frage klärt wurde zeige ich dir ein kleines Programm mit der Ausgabe „Hello World!“ im Browser.
Was ist Flask?
Flask ist wohl das bekannteste und kostenfreie Web Framework für Python.
Du kannst mit Flask dynamische (und natürlich statische) Webseiten / Anwendungen schreiben welche im Browser ablaufen.
Was benötige ich für die Programmierung?
Für die Programmierung benötigst du eine Entwicklungsumgebung wie Eclipse, PyCharm oder ähnlichem.
Natürlich kannst du eine Flask App auch in einem einfachen Editor wie Notepad++ oder PSPad schreiben aber das wäre nicht so komfortable denn zum testen deiner App benötigst du die Möglichkeit einen kleinen integrierten Server zu starten und das müsstest du dann über die Kommandozeile machen.
Und du brauchst natürlich das Flask Modul welches du installieren musst. Aber dazu kommen wir etwas später in einem separaten Beitrag.
Wie starte ich eine Flask App?
Eine Flask App wird in einem integrierten Server gestartet. Daher empfehle ich dir die Entwicklungsumgebung PyCharm diese bietet einige nützliche Features zum Entwickeln und nimmt dir einige Arbeit ab so das du dich auf dein Programm konzentrieren kannst.
Was benötige ich für das deployment meiner Flask App?
Für das deployment einer Flask App auf einem „echten“ Server benötigst du einen Flask fähigen Server, diese kosten etwas mehr als die normalen HTTP / PHP Server wie du diese für ein CMS kennst.
Du kannst natürlich auch deine Flask App auf einem Raspberry PI deployen und mit DynDNS ins Internet einbinden. Hier musst du jedoch einige Sicherheitsvorkehrungen treffen damit dein kleiner, eigener Server sicher vor angriffen ist.
Programmieren einer Flask App
Einbinden des Frameworks
Damit wir eine Flask App schreiben können benötigen wir wie bereits erwähnt das Modul Flask (und ggf. noch weitere nützliche Module).
Unsere Abhängigkeiten im Python Projekt können wir in einer Textdatei „requirements.txt“ zusammenfassen und mit dem Installer von Python laden. Der Aufbau dieser Datei ist wie folgt:
Modul==Version
Für unser nachfolgendes „Hello World!“ würde diese Datei wie folgt aussehen:
Flask==1.1.2 Jinja2==2.10.1 requests==0.11.1
Um diese Abhängigkeiten nun zu installieren müssen wir auf der Kommandozeile den Befehl:
pip install -r requierements.txt
eingeben. Es wird nun eine Verbindung aufgebaut und die Module installiert.
Proxy
Solltest du dich hinter einem Proxy befinden so musst du zusätzlich den Parameter „–proxy“ anhängen.
pip install -r requierements.txt --proxy=http://127.0.0.1:6790
Unter bestimmten Vorraussetzungen musst du dich ggf. an diesem Proxy anmelden. Du kannst dem Parameter Proxy noch zusätzlich deine Anmeldedaten mitgeben.
pip install -r requierements.txt --proxy=http://maxmustermann:passwort@127.0.0.1:6790
deinstallieren von Abhängigkeiten
Der Vollständigkeit halber möchte ich dir auch zeigen wie du diese Abhängigkeiten auch wieder deinstallieren kannst.
Der Befehl auf der Konsole lautet dazu:
pip uninstall -r requierements.txt
Du wirst nun zu jedem in der Datei „requirements.txt“ aufgeführten und im System gefundenen Modul gefragt ob du dieses wirklich deinstallieren möchtest.
Programm „Hello World!“ mit Flask
Ein erstes kleines „Hello World!“ kannst du mit Flask und Python in 5 Zeilen schreiben.
from flask import Flask app = Flask(__name__) @app.route('/') def start(): return "Hello World!"
Was passiert hier genau?
Schauen wir uns nun das „Hello World!“ Programm genauer an.
Zeile 1 – importieren von Flask
Damit wir die Funktionen von Flask verwenden können müssen wir natürlich das Modul importierten.
Zeile 2 – definieren des Namens für die Flask App
Damit der Server weiß wo er die Resourcen laden kann müssen wir das Modul benennen, welches wir starten.
Zeile 3 & 4 – Umleiten des Request vom Browser an eine Funktion
In unserem Fall reagieren wir auf das Root Verzeichnis der Adresse und starten dann die Funktion dahinter. D.h. im Detail ruft der Besucher die Adresse http://localhost:5000 auf und die Funktion „start()“ wird ausgeführt.
Wir können dieses Mapping auf beliebig viele Funktionen ausweiten:
@app.route('/impressum') def impressum(): return "Seite Impressum" @app.route('/kontakt') def kontakt(): return "Seite Kontakt" @app.route('/hallo') def hierStehtEinText123(): return "Seite Impressum"
Dabei kann die Funktion einen beliebigen Namen haben.
Zeile 5 – Ausgeben der Zeichenkette „Hello World!“
In unserem kleinen „Hello World!“ Beispiel geben wir lediglich eine Zeichenkette aus. In weiteren Beiträgen zu Python & Flask zeige ich dir wie du Parameter übergeben und damit zbsp. rechnen kannst.
starten der Flask APP
Um nun die Flask App zu starten müssen wir dazu den integrierten Flask Server bedienen.
Eclipse IDE & Kommandozeile
Die Eclipse IDE mit dem Plugin PyDev ist schon recht mächtig aber leider nicht besonders gut geeignet zum Entwickeln von Flask Apps. Um eine einfache Flask App zu starten empfehle ich dir den weg über die Kommandozeile.
C:\ide\workspaces\python\HelloFlask>set FLASK_APP=Main.py C:\ide\workspaces\python\HelloFlask>flask run * Serving Flask app "Main.py" * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Schritt 1 – definieren der Flask App als Umgebungsvariable
Zunächst definieren wir eine neue Umgebungsvariable mit dem Kommandozeilenbefehl „set“ und dem Key „FLASK_APP“ der Wert ist in unserem Fall die Python Datei welche unsere App darstellt „Main.py“.
set FLASK_APP=Main.py
Schritt 2 – starten des Flask Servers
Im zweiten und letzten Schritt starten wir den Flask Server mit dem Befehl „flask run“.
flask run
Du kannst nun erkennen das der Server gestartet wurde in dem du die Adresse http://localhost:5000 oder http://127.0.0.1:5000 im Browser eingibst.
Apache Ant build.xml
Ein klein wenig bequemer geht es in Eclipse mit folgendem Ant Skript:
<?xml version="1.0" ?> <project basedir="." default="run"> <target name="run"> <echo>run Flask App from Apache Ant</echo> <input message="Please enter Flask App Modul:" addproperty="flask.appname"/> <property name="FLASK_APP" value="${basedir}\${flask.appname}"/> <exec executable="C:\python37\Scripts\flask"> <env key="FLASK_APP" value="${FLASK_APP}"/> <arg value="run"/> </exec> </target> </project>
Dieses Skript zeigt bei ausführen ein Dialog an, in welchem man das Modul für die Umgebungsvariable „FLASK_APP“ eingibt.
Nachdem diese Umgebungsvariable gesetzt wurde, wird dann der Flask Server gestartet.
Buildfile: C:\ide\workspaces\python\HelloFlask\build.xml run: [echo] run Flask App from Apache Ant [exec] * Serving Flask app "C:\ide\workspaces\python\HelloFlask\Main.py" [exec] * Environment: production [exec] WARNING: This is a development server. Do not use it in a production deployment. [exec] Use a production WSGI server instead. [exec] * Debug mode: off [exec] * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Zum beenden des Ant Skriptes wird in der Entwicklungsumgebung Eclipse das Stop Symbol betätigt. Jedoch verbleibt der Task „flask.exe“ im Taskmanager welcher ggf. per Hand beendet werden muss.
Es empfiehlt sich das Skript auf der Konsole auszuführen!
Download des Eclipse Projektes
Hier nun das komplette PyDev Eclipse Projekt inkl. Ant Build Skript.
Fazit & Ausblick
In diesem Beitrag sollte es zunächst darüber gehen wie du ein einfaches kleines Programm mit Flask schreibst und es starten kannst.
Als nächstes möchte ich nun deutlich tiefer in diese Materie eintauchen und zeigen wie du dynamische Webinhalte programmierst. Dafür werde ich jedoch die Entwicklungsumgebung von Eclipse auf PyCharm wechseln da diese deutliche Vorteile hat.