====== LU06.L02 - Blog-Verwaltung mit Flask und JSON ====== from flask import Flask, jsonify, request app = Flask(__name__) # Eine einfache Datenstruktur zur Speicherung der Blog-Beiträge posts = [ {'id': 1, 'title': 'Erster Beitrag', 'content': 'Dies ist der Inhalt des ersten Beitrags.'}, {'id': 2, 'title': 'Zweiter Beitrag', 'content': 'Dies ist der Inhalt des zweiten Beitrags.'} ] @app.route('/posts', methods=['GET']) def blog_overview(): """Gibt eine Übersicht aller Blog-Beiträge als JSON zurück.""" return jsonify(posts) @app.route('/posts/', methods=['GET']) def blog_detail(post_id): """Gibt die Details eines bestimmten Blog-Beitrags als JSON zurück.""" post = next(filter(lambda p: p['id'] == post_id, posts), None) # mit Filter # post = next((post for post in posts if post['id'] == post_id), None) # mit Generator # Beide geben einen Iterator mit nur einem Element zurück, dieses kann mit next() geholt werden. if post: return jsonify(post) return jsonify({'message': 'Post nicht gefunden'}), 404 @app.route('/posts', methods=['POST']) def add_post(): """Fügt einen neuen Blog-Beitrag hinzu und gibt diesen als JSON zurück.""" data = request.get_json() new_post = { 'id': len(posts) + 1, 'title': data['title'], 'content': data['content'] } posts.append(new_post) return jsonify(new_post), 201 @app.route('/posts/', methods=['DELETE']) def delete_post(post_id): """Löscht einen bestimmten Blog-Beitrag und gibt eine Bestätigungsnachricht zurück.""" global posts posts = [post for post in posts if post['id'] != post_id] return jsonify({'message': 'Post erfolgreich gelöscht'}), 200 if __name__ == '__main__': app.run() - **Initialisierung und Datenstruktur**: * Wir beginnen mit dem Importieren der notwendigen Module und dem Erstellen einer Flask-App-Instanz. * Eine einfache Datenstruktur (''posts''-Liste) wird erstellt, um die Blog-Beiträge zu speichern. Jeder Beitrag ist ein Wörterbuch mit einem eindeutigen ''id'', einem ''title'' und einem ''content''. - **Blog-Übersicht (''blog_overview'')**: * Mit dem Dekorator ''@app.route('/posts', methods=['GET'])'' wird eine Route für den Pfad ''/posts'' definiert, die nur GET-Anfragen akzeptiert. * Die Funktion gibt eine JSON-Übersicht aller Blog-Beiträge zurück. - **Blog-Details (''blog_detail'')**: * Mit dem Dekorator ''@app.route('/posts/', methods=['GET'])'' wird eine Route für den Pfad ''/posts/'' definiert, wobei '''' eine Variable ist, die die ID des gewünschten Beitrags darstellt. * Die Funktion sucht nach dem Beitrag mit der angegebenen ID und gibt dessen Details als JSON zurück. Wenn der Beitrag nicht gefunden wird, wird eine 404-Nachricht zurückgegeben. - **Beitrag hinzufügen (''add_post'')**: * Mit dem Dekorator ''@app.route('/posts', methods=['POST'])'' wird eine Route für den Pfad ''/posts'' definiert, die nur POST-Anfragen akzeptiert. * Die Funktion nimmt die Daten aus dem Request-Body, erstellt einen neuen Beitrag und fügt ihn der ''posts''-Liste hinzu. Der neue Beitrag wird dann als JSON zurückgegeben. - **Beitrag löschen (''delete_post'')**: * Mit dem Dekorator ''@app.route('/posts/', methods=['DELETE'])'' wird eine Route für den Pfad ''/posts/'' definiert, die nur DELETE-Anfragen akzeptiert. * Die Funktion entfernt den Beitrag mit der angegebenen ID aus der ''posts''-Liste und gibt eine Bestätigungsnachricht zurück. - **App ausführen**: * Am Ende des Skripts wird die Flask-App mit ''app.run()'' gestartet, wenn das Skript direkt ausgeführt wird.