You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

204 lines
6.4 KiB

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/<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(autor.name.contains(query)).all()
else:
autores = []
return render_template('searchautor.html', query=query, autores=autores)