====== LU06d - Routing und Variable Rules in Flask ====== 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. ===== Grundlegendes Routing ===== 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. ===== Variable Rules ===== 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/') 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/') 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. ===== Unique URLs / Redirection Behavior ===== 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. ===== HTTP Methods ===== 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. ---- {{tag>M323-LU06}} [[https://creativecommons.org/licenses/by-nc-sa/4.0/ch/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Kevin Maurizi