Files
pbt/app.py
T
zisco f4c75526c3
Deploy PBT / deploy (push) Failing after 32s
Add workflow
2026-09-09 17:39:25 +02:00

142 lines
4.2 KiB
Python

from datetime import date
from flask import Flask, render_template, redirect, url_for, request, flash
from flask_login import (
LoginManager,
login_user,
logout_user,
login_required,
current_user,
)
from config import Config
from models import db, User, Fahrt, VERKEHRSMITTEL_OPTIONEN
login_manager = LoginManager()
login_manager.login_view = "login"
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
login_manager.init_app(app)
with app.app_context():
db.create_all()
register_routes(app)
return app
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
def register_routes(app):
@app.route("/")
def index():
if current_user.is_authenticated:
return redirect(url_for("dashboard"))
return redirect(url_for("login"))
@app.route("/register", methods=["GET", "POST"])
def register():
if request.method == "POST":
username = request.form["username"].strip()
email = request.form["email"].strip().lower()
password = request.form["password"]
if User.query.filter(
(User.username == username) | (User.email == email)
).first():
flash("Benutzername oder E-Mail bereits vergeben.", "error")
return redirect(url_for("register"))
user = User(username=username, email=email)
user.set_password(password)
db.session.add(user)
db.session.commit()
login_user(user)
return redirect(url_for("dashboard"))
return render_template("register.html")
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"].strip()
password = request.form["password"]
user = User.query.filter_by(username=username).first()
if user is None or not user.check_password(password):
flash("Login fehlgeschlagen. Bitte prüfe deine Daten.", "error")
return redirect(url_for("login"))
login_user(user)
return redirect(url_for("dashboard"))
return render_template("login.html")
@app.route("/logout")
@login_required
def logout():
logout_user()
return redirect(url_for("login"))
@app.route("/dashboard")
@login_required
def dashboard():
fahrten = (
Fahrt.query.filter_by(user_id=current_user.id)
.order_by(Fahrt.datum.desc())
.all()
)
return render_template("dashboard.html", fahrten=fahrten)
@app.route("/fahrt/neu", methods=["GET", "POST"])
@login_required
def neue_fahrt():
if request.method == "POST":
fahrt = Fahrt(
user_id=current_user.id,
verkehrsmittel=request.form["verkehrsmittel"],
linie=request.form.get("linie", "").strip(),
von=request.form["von"].strip(),
nach=request.form["nach"].strip(),
datum=request.form.get("datum") or date.today(),
bewertung=int(request.form["bewertung"]),
kommentar=request.form.get("kommentar", "").strip(),
)
db.session.add(fahrt)
db.session.commit()
flash("Fahrt gespeichert.", "success")
return redirect(url_for("dashboard"))
return render_template(
"add_entry.html",
verkehrsmittel_optionen=VERKEHRSMITTEL_OPTIONEN,
heute=date.today().isoformat(),
)
@app.route("/fahrt/<int:fahrt_id>/loeschen", methods=["POST"])
@login_required
def fahrt_loeschen(fahrt_id):
fahrt = Fahrt.query.get_or_404(fahrt_id)
if fahrt.user_id != current_user.id:
flash("Nicht erlaubt.", "error")
return redirect(url_for("dashboard"))
db.session.delete(fahrt)
db.session.commit()
flash("Fahrt gelöscht.", "success")
return redirect(url_for("dashboard"))
app = create_app()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)