Files
MyMovieDB/main.py
jonnybravo ac32152725
All checks were successful
Deploy to ras-dan-01 / deploy (push) Successful in -22s
try
2025-08-26 16:54:54 +02:00

143 lines
5.0 KiB
Python

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/<int:movie_id>", 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'))