@@ -0,0 +1,141 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user