from flask import Blueprint, render_template, request, redirect, url_for, current_app, send_from_directory from werkzeug.utils import secure_filename from flask_login import login_user, logout_user, login_required from sqlalchemy import desc import datetime import os from .models import db, Libros, Autores bp = Blueprint("paginas", __name__) @bp.route('/') def index(): autores = Autores.query.all() libros = Libros.query.all() return render_template('index.html', autores=autores, libros=libros) @bp.route('/libros') def libros(): libros = Libros.query.all() return render_template('libros.html', libros=libros) @bp.route('/autores') def autores(): autores = Autores.query.all() #return render_template('autores.html', autores=autores) return render_template('autorescard.html', autores=autores) @bp.route('/404') def cuatrocerocuatro(): return render_template('404.html') @bp.route('/help') def help(): return render_template('help.html') @bp.route('/account') @login_required def account(): return render_template('account.html') """ @bp.route('/libro/') def libro(libro_id): libro = Libros.query.get_or_404(libro_id) autor = Autores.query.get_or_404(libro.autor_id) return render_template('libro.html', libro=libro, autor=autor) """ @bp.route('/add_libro', methods=['GET', 'POST']) @login_required def add_libro(): if request.method == 'POST': fecha = datetime.date.fromisoformat(request.form['fecha']) autor_id = request.form['autor_id'] titulo = request.form['titulo'] if 'portada' not in request.files: return "Falta el fichero de imagen", 400 portada = request.files['portada'] # Verificar que se ha seleccionado un archivo if portada.filename == '': return "No selected file", 400 if portada: image_filename = secure_filename(portada.filename) portada.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename)) else: image_filename = None new_libro = Libros(fecha=fecha, autor_id=autor_id, titulo=titulo, portada=image_filename) db.session.add(new_libro) db.session.commit() return redirect(url_for('paginas.autor', autor_id=autor_id)) autores = Autores.query.all() return render_template('add_libro.html', autores=autores) @bp.route('/edit_libro/', methods=['GET', 'POST']) @login_required def edit_libro(libro_id): libro = Libros.query.get_or_404(libro_id) autores = Autores.query.all() if request.method == 'POST': libro.fecha = request.form['fecha'] libro.autor_id = request.form['autor_id'] libro.titulo = request.form['titulo'] if 'portada' in request.files: portada = request.files['portada'] if portada.filename != '': image_filename = secure_filename(portada.filename) portada.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename)) libro.portada = image_filename db.session.commit() return redirect(url_for('paginas.libro', libro_id=libro.id)) autores = Autores.query.all() return render_template('edit_libro.html', libro=libro, autores=autores) @bp.route('/add_autor', methods=['GET', 'POST']) @login_required def add_autor(): if request.method == 'POST': nombre = request.form['nombre'] apellido = request.form['apellido'] # Verificar que el campo 'cover_image' está en request.files if 'foto' not in request.files: return "No file part in the request", 400 foto = request.files['foto'] # Verificar que se ha seleccionado un archivo if foto.filename == '': return "No selected file", 400 if foto: image_filename = secure_filename(foto.filename) foto.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename)) else: image_filename = None new_autor = Autores(nombre=nombre, apellido=apellido, foto=image_filename) db.session.add(new_autor) db.session.commit() return redirect(url_for('paginas.index')) return render_template('add_autor.html') @bp.route('/edit_autor/', methods=['GET', 'POST']) @login_required def edit_autor(autor_id): autor = Autores.query.get_or_404(autor_id) if request.method == 'POST': autor.nombre = request.form['nombre'] autor.apellido = request.form['apellido'] if 'foto' in request.files: foto = request.files['foto'] if foto.filename != '': image_filename = secure_filename(foto.filename) foto.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename)) autor.foto = image_filename db.session.commit() return redirect(url_for('paginas.autor', autor_id=autor.id)) return render_template('edit_autor.html', autor=autor) @bp.route('/autor/') def autor(autor_id): autor = Autores.query.get_or_404(autor_id) libros = Libros.query.filter_by(autor_id=autor_id).all() return render_template('autor.html', autor=autor, libros=libros) @bp.route('/uploads/') def uploaded_file(filename): return send_from_directory(current_app.config['UPLOAD_FOLDER'], filename) @bp.route('/searchautor') def searchautor(): query = request.args.get('query', '') if query: autores = Autores.query.filter(autor.name.contains(query)).all() else: autores = [] return render_template('searchautor.html', query=query, autores=autores)