mirror of
https://github.com/Rainyy21/Front-end-Design-Project.git
synced 2026-10-10 23:40:24 -04:00
96 lines
3.7 KiB
Python
96 lines
3.7 KiB
Python
import sqlite3, os
|
|
from flask import Flask, render_template, request, redirect, url_for
|
|
|
|
app = Flask(__name__)
|
|
DB_NAME = './db/my_library.db'
|
|
UPLOAD_FOLDER = 'static/covers'
|
|
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
|
|
|
|
def init_db():
|
|
conn = sqlite3.connect(DB_NAME)
|
|
cursor = conn.cursor()
|
|
cursor.executescript('''
|
|
CREATE TABLE IF NOT EXISTS media (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT NOT NULL, type TEXT, release_year INTEGER, image_path TEXT DEFAULT 'default.jpg'
|
|
);
|
|
CREATE TABLE IF NOT EXISTS books (book_id INTEGER PRIMARY KEY, author TEXT, FOREIGN KEY (book_id) REFERENCES media (id));
|
|
CREATE TABLE IF NOT EXISTS shows (show_id INTEGER PRIMARY KEY, network TEXT, FOREIGN KEY (show_id) REFERENCES media (id));
|
|
CREATE TABLE IF NOT EXISTS genres (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE);
|
|
CREATE TABLE IF NOT EXISTS media_genres (media_id INTEGER, genre_id INTEGER);
|
|
''')
|
|
genres = [('Sci-Fi',), ('Fantasy',), ('Horror',), ('Drama',), ('Comedy',)]
|
|
cursor.executemany("INSERT OR IGNORE INTO genres (name) VALUES (?)", genres)
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
@app.route('/')
|
|
def index():
|
|
conn = sqlite3.connect(DB_NAME)
|
|
conn.row_factory = sqlite3.Row
|
|
query = """
|
|
SELECT m.*, b.author, s.network, GROUP_CONCAT(g.name, ', ') as genre_list
|
|
FROM media m
|
|
LEFT JOIN books b ON m.id = b.book_id
|
|
LEFT JOIN shows s ON m.id = s.show_id
|
|
LEFT JOIN media_genres mg ON m.id = mg.media_id
|
|
LEFT JOIN genres g ON mg.genre_id = g.id
|
|
GROUP BY m.id
|
|
"""
|
|
items = conn.execute(query).fetchall()
|
|
all_genres = conn.execute("SELECT * FROM genres").fetchall()
|
|
conn.close()
|
|
return render_template('main.html', items=items, genres=all_genres)
|
|
|
|
@app.route('/add', methods=['POST'])
|
|
def add_media():
|
|
title, m_type, year = request.form['title'], request.form['type'], request.form['year']
|
|
extra, genre_id = request.form['extra_info'], request.form['genre_id']
|
|
|
|
file = request.files.get('cover_image')
|
|
filename = file.filename if file and file.filename != '' else 'default.jpg'
|
|
if file and file.filename != '':
|
|
file.save(os.path.join(UPLOAD_FOLDER, filename))
|
|
|
|
conn = sqlite3.connect(DB_NAME)
|
|
cursor = conn.cursor()
|
|
cursor.execute("INSERT INTO media (title, type, release_year, image_path) VALUES (?, ?, ?, ?)", (title, m_type, year, filename))
|
|
m_id = cursor.lastrowid
|
|
cursor.execute("INSERT INTO media_genres (media_id, genre_id) VALUES (?, ?)", (m_id, genre_id))
|
|
|
|
if m_type == 'Book':
|
|
cursor.execute("INSERT INTO books (book_id, author) VALUES (?, ?)", (m_id, extra))
|
|
else:
|
|
cursor.execute("INSERT INTO shows (show_id, network) VALUES (?, ?)", (m_id, extra))
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
return redirect(url_for('index'))
|
|
|
|
@app.route('/delete/<int:media_id>',methods=['POST'])
|
|
def delete_media(media_id):
|
|
conn = sqlite3.connect(DB_NAME)
|
|
cursor = conn.cursor()
|
|
|
|
cursor.execute("SELECT image_path FROM media WHERE id = ?",(media_id,))
|
|
row = cursor.fetchone()
|
|
if row and row[0] != 'default.jpg':
|
|
image_path = os.path.join(UPLOAD_FOLDER, row[0])
|
|
if os.path.exists(image_path):
|
|
os.remove(image_path)
|
|
|
|
cursor.execute("DELETE from media WHERE id = ?",(media_id,))
|
|
cursor.execute("DELETE from books WHERE book_id = ?",(media_id,))
|
|
cursor.execute("DELETE from shows WHERE show_id = ?",(media_id,))
|
|
cursor.execute("DELETE from media_genres WHERE media_id = ?",(media_id,))
|
|
conn.commit()
|
|
cursor.close()
|
|
conn.close()
|
|
return redirect(url_for('index'))
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
init_db()
|
|
app.run(debug=True)
|