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('libroscard.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/<int:libro_id>')
|
|
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':
|
|
anno = request.form['anno']
|
|
autor_id = request.form['autor_id']
|
|
titulo = request.form['titulo']
|
|
|
|
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
|
|
|
|
epub = request.files['epub']
|
|
|
|
# Verificar que se ha seleccionado un archivo
|
|
|
|
if epub.filename == '':
|
|
return "No selected file", 400
|
|
|
|
if epub:
|
|
epub_filename = secure_filename(epub.filename)
|
|
epub.save(os.path.join(current_app.config['UPLOAD_FOLDER'], epub_filename))
|
|
else:
|
|
epub_filename = None
|
|
|
|
new_libro = Libros(anno=anno, autor_id=autor_id, titulo=titulo, portada=image_filename, epub=epub_filename)
|
|
db.session.add(new_libro)
|
|
db.session.commit()
|
|
|
|
return redirect(url_for('paginas.autor', autor_id=autor_id))
|
|
|
|
autores = Autores.query.all()
|
|
|
|
if autores:
|
|
return render_template('add_libro.html', autores=autores)
|
|
else:
|
|
return render_template('nohayautores.html')
|
|
|
|
|
|
@bp.route('/edit_libro/<int:libro_id>', 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.anno = request.form['anno']
|
|
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
|
|
|
|
if 'epub' in request.files:
|
|
epub = request.files['epub']
|
|
if epub.filename != '':
|
|
epub_filename = secure_filename(epub.filename)
|
|
|
|
epub.save(os.path.join(current_app.config['UPLOAD_FOLDER'], epub_filename))
|
|
libro.portada = epub_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/<int:autor_id>', 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/<int:autor_id>')
|
|
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/<filename>')
|
|
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(Autores.apellido.contains(query)).all()
|
|
else:
|
|
autores = []
|
|
|
|
return render_template('searchautor.html', query=query, autores=autores)
|
|
|
|
@bp.route('/searchlibro')
|
|
def searchlibro():
|
|
query = request.args.get('query', '')
|
|
|
|
if query:
|
|
libros = Libros.query.filter(Libros.titulo.contains(query)).all()
|
|
else:
|
|
libros = []
|
|
|
|
return render_template('searchlibro.html', query=query, libros=libros)
|