import os from flask import Flask, render_template, request, redirect, url_for from models import db, Projekt, Bewerbung app = Flask(__name__) os.makedirs(app.instance_path, exist_ok=True) app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.join( app.instance_path, "projekte.db" ) app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False app.config["SECRET_KEY"] = os.environ.get("SECRET_KEY", "dev-secret-key") db.init_app(app) KATEGORIEN = [ "Bau & Planung", "Verwaltung", "Bürgerdienste", "Demokratie & Partizipation", "Bildung", "Infrastruktur", ] @app.route("/") def index(): suche = request.args.get("suche", "").strip() kategorie = request.args.get("kategorie", "").strip() query = Projekt.query if suche: query = query.filter( Projekt.titel.ilike(f"%{suche}%") | Projekt.beschreibung.ilike(f"%{suche}%") ) if kategorie: query = query.filter(Projekt.kategorie == kategorie) projekte = query.order_by(Projekt.erstellt_am.desc()).all() return render_template( "index.html", projekte=projekte, kategorien=KATEGORIEN, suche=suche, aktuelle_kategorie=kategorie, ) @app.route("/projekt/") def projekt_detail(id): projekt = Projekt.query.get_or_404(id) return render_template("projekt_detail.html", projekt=projekt) @app.route("/projekt/einreichen", methods=["GET", "POST"]) def projekt_einreichen(): if request.method == "POST": projekt = Projekt( titel=request.form.get("titel", "").strip(), beschreibung=request.form.get("beschreibung", "").strip(), kategorie=request.form.get("kategorie", "").strip(), behoerde=request.form.get("behoerde", "").strip(), kontakt_email=request.form.get("kontakt_email", "").strip(), ) if projekt.titel and projekt.beschreibung and projekt.kategorie and projekt.behoerde and projekt.kontakt_email: db.session.add(projekt) db.session.commit() return redirect(url_for("index")) return render_template("projekt_einreichen.html", kategorien=KATEGORIEN) @app.route("/bewerbung", methods=["POST"]) def bewerbung_abgeben(): projekt_id = request.form.get("projekt_id", type=int) projekt = Projekt.query.get_or_404(projekt_id) bewerbung = Bewerbung( projekt_id=projekt_id, name=request.form.get("name", "").strip(), email=request.form.get("email", "").strip(), nachricht=request.form.get("nachricht", "").strip() or None, ) if bewerbung.name and bewerbung.email: db.session.add(bewerbung) db.session.commit() return redirect(url_for("bewerbung_erfolg")) return redirect(url_for("projekt_detail", id=projekt_id)) @app.route("/bewerbung/erfolg") def bewerbung_erfolg(): return render_template("bewerbung_erfolg.html") with app.app_context(): db.create_all()