Skip to content
Snippets Groups Projects
Commit ae4b45c6 authored by Axel Dürkop's avatar Axel Dürkop
Browse files

Updates

parent 63ee3001
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
# Flask: Der Einstieg
%% Cell type:markdown id: tags:
Wir gehen davon aus, dass in unserem System das Modul [Flask](http://flask.pocoo.org/) installiert ist. Wenn Sie mit [Anaconda](https://www.anaconda.com/) arbeiten, können Sie nachsehen, dass es standardmäßig [in den Paketen enthalten ist](https://docs.anaconda.com/anaconda/packages/py3.6_linux-64).
Sofern Flask vorhanden ist, können wir es für unsere Anwendung importieren.
%% Cell type:code id: tags:
``` python
from flask import Flask
```
%% Cell type:markdown id: tags:
Anschließend erzeugen wir eine Variable, in der wir eine Instanz des Flask-Objekts speichern.
%% Cell type:code id: tags:
``` python
app = Flask(__name__)
```
%% Cell type:markdown id: tags:
Nun definieren wir als erstes eine sogenannte *Route*. Wenn unsere Anwendung erkennt, dass die eingebene URL dieser Route entspricht, leitet sie den Request an eine zugehörige Funktion weiter.
Die Definition einer Route in Flask folgt einem einfachen Vorgehen. Dabei steht in den Klammern das konkrete Muster, das in der URL vorhanden sein muss. Anschließend folgt die Definition der Funktion, die aufgerufen wird, wenn die Route greift. Diese Funktion sollte einen sinnvollen und selbstdokumentierenden Namen tragen.
In diesem Fall gibt der eingebaute Webserver in Flask eine sehr einfache Antwort (*Response*), nämlich nur einen einfachen String. Zu den Grundlagen von *HTTP* und dem Konzept von Anfrage/Antwort (*Request/Response*) vgl. z.B. Meinel & Sack (2004, S. 735 ff.).
%% Cell type:code id: tags:
``` python
# -- Homepage --
@app.route("/")
def index():
# Response, die an den Browser zurückgeht
return '<a href="#" target="_blank">Bildergalerie</a>'
```
%% Cell type:markdown id: tags:
Den Abschluss der Datei bildet in diesem Fall die Startanweisung für unsere Anwendung.
Den Abschluss der Datei bildet in diesem Fall die Startanweisung für unsere Anwendung. Diese besteht aus dem Aufruf der Methode `run()` auf dem `app`-Objekt. Dabei kann der Parameter `host` übergeben werden, durch den der Zugriff auf den Entwicklungsserver reglementiert werden kann. `"0.0.0.0"` bedeutet, dass alle IP-Adressen erlaubt sind.
%% Cell type:code id: tags:
``` python
if __name__ =='__main__':
app.run(host="0.0.0.0")
```
%% Output
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
134.28.125.29 - - [07/Nov/2017 09:57:39] "GET / HTTP/1.1" 200 -
134.28.125.29 - - [07/Nov/2017 10:04:19] "GET / HTTP/1.1" 200 -
134.28.125.29 - - [07/Nov/2017 10:04:20] "GET / HTTP/1.1" 200 -
134.28.125.29 - - [07/Nov/2017 10:04:29] "GET / HTTP/1.1" 200 -
%% Cell type:markdown id: tags:
## Aufgaben
- Wie können Sie erreichen, dass die Anwendung eine korrekte HTML-Seite ausgibt, wenn die Homepage aufgerufen wird?
- Was müssen Sie tun, um noch eine weitere Seite unter der URL `/team` aufrufen zu können?
- Wenn Sie die Website unter http://localhost:5000 aufrufen, loggt der Entwicklungsserver Ihre Aktionen mit (s.o.). Was bedeuten die Informationen in den einzelnen Zeilen?
**Tipp:** Erstellen Sie eine Kopie dieses Notebooks, bevor Sie es verändern! Fortgeschrittene können eine Branch in der Versionskontrolle erstellen.
%% Cell type:markdown id: tags:
## Referenzen
- Meinel, C. & Sack, H. (2004). WWW: Kommunikation, Internetworking, Web-Technologien. Berlin u.a.: Springer.
%% Cell type:markdown id: tags:
**Anmerkungen:** Damit Änderungen an der Anwendung wirksam werden, ist der Entwicklungsserver von Flask neu zu starten. Dies erfolgt im Kontext von Jupyter Notebook, indem der *Kernel* neu gestartet wird und alle Zellen erneut ausgeführt werden. Ein Abkürzung dafür stellt der Menüeintrag *Kernel -> Restart & Run All* dar. Anschließend ist je nach Leistungsfähigkeit des Hostrechners einige Sekunden zu warten, bis der Entwicklungsserver wieder erreichbar ist.
%% Cell type:markdown id: tags:
---
<a href="flask-galerie.ipynb" style="display: inline-block; float:right">nächstes Arbeitsblatt &raquo;</a><a href="flask.ipynb">&laquo; vorheriges Arbeitsblatt</a>
%% Cell type:code id: tags:
``` python
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment