In Flask ist das Routing ein zentrales Konzept, das bestimmt, wie URLs an bestimmte Funktionen gebunden werden. Jede Funktion ist mit einer oder mehreren URLs verknüpft, sodass, wenn eine dieser URLs angefordert wird, die zugehörige Funktion aufgerufen wird. Mit variablen Regeln kann Flask dynamische URLs verarbeiten, die Teile enthalten, die sich ändern.
In Flask wird das Routing mit dem @app.route()
-Dekorator durchgeführt. Zum Beispiel:
@app.route('/') def home(): return 'Homepage'
In diesem Beispiel wird die Funktion home()
aufgerufen, wenn die Haupt-URL (/
) der Anwendung angefordert wird.
Mit Flask können Sie spezifische Abschnitte einer URL als Variablen definieren. Diese Variablen werden dann an die zugehörige Funktion als Argumente übergeben.
@app.route('/user/<username>') def show_user_profile(username): return f'User {username}'
In diesem Beispiel wird die show_user_profile()
-Funktion aufgerufen, wenn eine URL wie /user/john
angefordert wird. Der Wert john
wird dann an die Funktion als username
-Argument übergeben.
Es ist auch möglich, den Datentyp der Variablen zu definieren:
@app.route('/post/<int:post_id>') def show_post(post_id): return f'Post {post_id}'
Hier wird erwartet, dass post_id
ein Integer ist. Wenn die URL /post/123
angefordert wird, wird die show_post()
-Funktion mit post_id
als 123 aufgerufen.
Flask hat eine interessante Eigenschaft, wenn es um die Endung von URLs geht. Es unterscheidet zwischen URLs mit und ohne abschließendem Schrägstrich.
@app.route('/about') def about(): return 'About Page'
Wenn du `/about/` (mit einem abschließenden Schrägstrich) besuchst, wird Flask automatisch auf `/about` (ohne Schrägstrich) umleiten. Dies stellt sicher, dass URLs eindeutig sind, was hilft, doppelte Inhalte zu vermeiden und die Suchmaschinenoptimierung (SEO) zu verbessern.
Umgekehrt, wenn du eine Route mit einem abschließenden Schrägstrich definierst, wird Flask den Benutzer zu dieser URL mit Schrägstrich umleiten, wenn sie ohne besucht wird.
@app.route('/projects/') def projects(): return 'Projects Page'
Ein Besuch von `/projects` wird automatisch zu `/projects/` umgeleitet.
Standardmäßig reagieren die in Flask definierten Routen nur auf GET-Anfragen. Wenn du jedoch andere HTTP-Methoden wie POST, PUT oder DELETE verarbeiten möchtest, musst du dies explizit angeben.
from flask import request @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return 'Login via POST' else: return 'Login via GET'
In diesem Beispiel reagiert die login()
-Funktion sowohl auf GET- als auch auf POST-Anfragen. Mit `request.method` kannst du überprüfen, welche HTTP-Methode verwendet wurde, und entsprechend reagieren.