import flask from flask import render_template, redirect, url_for, flash from flask_login import LoginManager, login_user, logout_user, login_required, current_user import moviedb_func from moviedb_func import delete_movie_by_id app = flask.Flask(__name__) app.secret_key = "Start1234!" login_manager = LoginManager() login_manager.init_app(app) login_manager.login_view = "login" @login_manager.user_loader def load_user(user_id): return moviedb_func.get_user_by_id(user_id) @app.route("/register", methods=["GET", "POST"]) def register(): if flask.request.method == "POST": username = flask.request.form.get("username") password = flask.request.form.get("password") if moviedb_func.get_user_by_username(username): flash("Benutzername existiert bereits") return redirect(url_for("register")) moviedb_func.add_user(username, password) return redirect(url_for("login")) return render_template("register.html") @app.route("/login", methods=["GET", "POST"]) def login(): if flask.request.method == "POST": username = flask.request.form.get("username") password = flask.request.form.get("password") user = moviedb_func.get_user_by_username(username) if user and user.check_password(password): login_user(user) return redirect(url_for("index")) flash("Ungültiger Benutzername oder Passwort") return render_template("login.html") @app.route("/logout") @login_required def logout(): logout_user() return redirect(url_for("login")) @app.route("/", methods=["GET", "POST"]) @login_required def index(): page = flask.request.args.get('page', 1, type=int) per_page = 20 search_query = "" if flask.request.method == "POST": search_query = flask.request.form.get("search") else: search_query = flask.request.args.get("search") data_all, total_pages = moviedb_func.show_movie_list(user_id=current_user.id, search_query=search_query, page=page, per_page=per_page) return render_template( "index.html", sitename="Meine Movieliste !!!", data_all=data_all, total_pages=total_pages, current_page=page, search_query=search_query ) @app.get("/add_movie") def add_movie(): return render_template( "add_movie.html", sitename="Meine Movieliste !!!", url="output", select_movie="add_movie", select_genre="add_genre", select_medium="add_medium", data=moviedb_func.all_select(), data_medium=moviedb_func.all_select(what_select="medium") ) @app.post("/output") @login_required def csv_output(): select_add_movie = flask.request.form["add_movie"] select_medium = flask.request.form["add_medium"] select_medium_id = moviedb_func.search_id( search_name=select_medium, select_from="medium", select_where="medium") if moviedb_func.scrape_and_add_movie(movie_name=select_add_movie, medium_id=select_medium_id, user_id=current_user.id): flash("Film erfolgreich hinzugefügt!") return redirect(url_for('index')) else: flash("Film konnte nicht automatisch hinzugefügt werden. Bitte versuchen Sie die manuelle Eingabe.") return redirect(url_for('add_movie_manually', movie_name=select_add_movie, medium_id=select_medium_id)) @app.get("/add_movie_manually") @login_required def add_movie_manually(): movie_name = flask.request.args.get('movie_name') medium_id = flask.request.args.get('medium_id') return render_template( "add_movie_manually.html", sitename="Manuelle Eingabe", movie_name=movie_name, medium_id=medium_id ) @app.post("/save_manual") @login_required def save_manual(): movie_name = flask.request.form["movie_name"] medium_id = flask.request.form["medium_id"] director_name = flask.request.form["director_name"] release_year = flask.request.form["release_year"] genre_name = flask.request.form["genre_name"] if moviedb_func.add_manual_movie(movie_name=movie_name, medium_id=int(medium_id), director_name=director_name, release_year=int(release_year), genre_name=genre_name, user_id=current_user.id): flash("Film manuell erfolgreich hinzugefügt!") return redirect("/") else: flash("Fehler: Film konnte nicht manuell hinzugefügt werden. Möglicherweise existiert dieser Film bereits in deiner Liste.") return redirect(url_for('add_movie_manually', movie_name=movie_name, medium_id=medium_id)) @app.route("/delete_movie/", methods=["POST"]) @login_required def delete_movie(movie_id): if moviedb_func.delete_movie_by_id(movie_id): flash("Film erfolgreich gelöscht!") else: flash("Fehler beim Löschen des Films.") return redirect(url_for("index")) if __name__ == "__main__": moviedb_func.create_movie_database() app.run(port=5082, host="0.0.0.0", debug=True, ssl_context=('cert.pem', 'key.pem'))