Browse Source

Progresando

politica
Celestino Rey 1 year ago
parent
commit
38c2df5a09
12 changed files with 79 additions and 122 deletions
  1. +36
    -0
      PruebaForm/app.py
  2. BIN
      PruebaForm/instance/uploads/emoji1.png
  3. +24
    -0
      PruebaForm/templates/upload.html
  4. BIN
      RecetasPy/servicios/instance/recetas.db
  5. +2
    -1
      RecetasPy/servicios/recetaspy/__init__.py
  6. +3
    -3
      RecetasPy/servicios/recetaspy/auth.py
  7. +7
    -57
      RecetasPy/servicios/recetaspy/paginas.py
  8. +1
    -18
      RecetasPy/servicios/recetaspy/templates/_cabecera.html
  9. +0
    -1
      RecetasPy/servicios/recetaspy/templates/_navegacion.html
  10. +0
    -36
      RecetasPy/servicios/recetaspy/templates/add_album.html
  11. +2
    -2
      RecetasPy/servicios/recetaspy/templates/index.html
  12. +4
    -4
      RecetasPy/servicios/recetaspy/templates/signup.html

+ 36
- 0
PruebaForm/app.py View File

@ -0,0 +1,36 @@
from flask import Flask, request, redirect, url_for, render_template, flash
from werkzeug.utils import secure_filename
import os
app = Flask(__name__, instance_relative_config=True)
app.config['UPLOAD_FOLDER'] = os.path.join(app.instance_path, 'uploads')
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # Limitar el tamaño del archivo a 16 MB
app.config['SECRET_KEY'] = 'supersecretkey'
# Asegúrate de que la carpeta de uploads existe
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
@app.route('/')
def index():
return render_template('upload.html')
@app.route('/upload', methods=['POST'])
def upload_file():
if 'photo' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['photo']
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
flash('File successfully uploaded')
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)

BIN
PruebaForm/instance/uploads/emoji1.png View File

Before After
Width: 598  |  Height: 599  |  Size: 59 KiB

+ 24
- 0
PruebaForm/templates/upload.html View File

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload Photo</title>
</head>
<body>
<h1>Upload Photo</h1>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
<form method="post" action="{{ url_for('upload_file') }}" enctype="multipart/form-data">
<input type="file" name="photo">
<input type="submit" value="Upload">
</form>
</body>
</html>

BIN
RecetasPy/servicios/instance/recetas.db View File


+ 2
- 1
RecetasPy/servicios/recetaspy/__init__.py View File

@ -6,7 +6,7 @@ from flask_login import LoginManager, UserMixin, login_user, login_required, log
# init SQLAlchemy so we can use it later in our models
db = SQLAlchemy()
from recetas import paginas, auth
from recetaspy import paginas, auth
def create_app():
app = Flask(__name__)
@ -15,6 +15,7 @@ def create_app():
app.config['SECRET_KEY'] = 'secret-key-goes-here'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///recetas.db'
app.config['UPLOAD_FOLDER'] = os.path.join(app.instance_path, 'uploads')
app.config['DEBUG'] = True
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 16 MB máximo


+ 3
- 3
RecetasPy/servicios/recetaspy/auth.py View File

@ -39,9 +39,9 @@ def signup():
@bp.route('/signup', methods=['POST'])
def signup_post():
username = request.form['username']
password = request.form['password']
confirm_password = request.form['confirm_password']
username = request.form.get('username')
password = request.form.get('password')
confirm_password = request.form.get('confirm_password')
photo = request.files['fotoperfil']
if password != confirm_password:


+ 7
- 57
RecetasPy/servicios/recetaspy/paginas.py View File

@ -4,7 +4,7 @@ from flask_login import login_user, logout_user, login_required, current_user
import os
from .models import db, receta, Ingredient, Instruction
from .models import db, Recipe, Ingredient, Instruction
bp = Blueprint("paginas", __name__)
@ -15,7 +15,7 @@ def index():
@bp.route('/recetas')
def recetas():
recetas = receta.query.all()
recetas = Recipe.query.all()
return render_template('recetas.html', recetas=recetas)
@bp.route('/404')
@ -33,7 +33,7 @@ def account():
@bp.route('/receta/<int:receta_id>')
def receta(receta_id):
receta = receta.query.get_or_404(receta_id)
receta = Recipe.query.get_or_404(receta_id)
return render_template('recetas.html', receta=receta)
@bp.route('/anade_receta', methods=['GET', 'POST'])
@ -49,12 +49,12 @@ def anade_receta():
receta = receta(title=title, description=description, author=current_user)
for i, (ingredient, quantity) in enumerate(zip(ingredients, quantities), start=1):
receta.ingredients.append(Ingredient(name=ingredient, quantity=quantity, order=i))
Recipe.ingredients.append(Ingredient(name=ingredient, quantity=quantity, order=i))
for i, description in enumerate(step_descriptions, start=1):
receta.instructions.append(Instruction(step=i, description=description, order=i))
Recipe.instructions.append(Instruction(step=i, description=description, order=i))
db.session.add(receta)
db.session.add(Recipe)
db.session.commit()
flash('receta created successfully!', 'success')
@ -63,46 +63,6 @@ def anade_receta():
return render_template('nueva_receta.html')
@bp.route('/add_album', methods=['GET', 'POST'])
@login_required
def add_album():
if request.method == 'POST':
name = request.form['name']
artist = request.form['artist']
year = request.form['year']
# Verificar que el campo 'cover_image' está en request.files
if 'coverimage' not in request.files:
return "No file part in the request", 400
cover_image = request.files['coverimage']
# Verificar que se ha seleccionado un archivo
if cover_image.filename == '':
return "No selected file", 400
if cover_image:
image_filename = secure_filename(cover_image.filename)
cover_image.save(os.path.join(current_app.config['UPLOAD_FOLDER'], image_filename))
else:
image_filename = None
new_album = Album(name=name, artist=artist, year=year, cover_image=image_filename)
db.session.add(new_album)
db.session.commit()
return redirect(url_for('paginas.index'))
return render_template('add_album.html')
@bp.route('/album/<int:album_id>')
def album(album_id):
album = Album.query.get_or_404(album_id)
songs = Song.query.filter_by(album_id=album_id).all()
return render_template('album.html', album=album, songs=songs)
@bp.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(current_app.config['UPLOAD_FOLDER'], filename)
@ -111,17 +71,7 @@ def uploaded_file(filename):
def buscareceta():
query = request.args.get('query', '')
if query:
songs = Song.query.filter(Song.title.contains(query)).all()
songs = Recipe.query.filter(Recipe.title.contains(query)).all()
else:
songs = []
return render_template('buscareceta.html', query=query, songs=songs)
@bp.route('/searchalbum')
def searchalbum():
query = request.args.get('query', '')
if query:
albumes = Album.query.filter(Album.name.contains(query)).all()
else:
albumes = []
return render_template('searchalbum.html', query=query, albumes=albumes)

+ 1
- 18
RecetasPy/servicios/recetaspy/templates/_cabecera.html View File

@ -73,22 +73,6 @@
</a><!--//nav-link-->
</li><!--//nav-item-->
<li class="nav-item">
<!--//Bootstrap Icons: https://icons.getbootstrap.com/ -->
<a class="nav-link" href="{{ url_for('paginas.albumes') }}">
<span class="nav-icon">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-card-list" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M14.5 3h-13a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h13a.5.5 0 0 0 .5-.5v-9a.5.5 0 0 0-.5-.5zm-13-1A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0 0 1.5 14h13a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-13z"/>
<path fill-rule="evenodd" d="M5 8a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7A.5.5 0 0 1 5 8zm0-2.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0 5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5z"/>
<circle cx="3.5" cy="5.5" r=".5"/>
<circle cx="3.5" cy="8" r=".5"/>
<circle cx="3.5" cy="10.5" r=".5"/>
</svg>
</span>
<span class="nav-link-text">Álbumes</span>
</a><!--//nav-link-->
</li><!--//nav-item-->
<li class="nav-item has-submenu">
<!--//Bootstrap Icons: https://icons.getbootstrap.com/ -->
<a class="nav-link submenu-toggle" href="#" data-bs-toggle="collapse" data-bs-target="#submenu-1" aria-expanded="false" aria-controls="submenu-1">
@ -108,8 +92,7 @@
</a><!--//nav-link-->
<div id="submenu-1" class="collapse submenu submenu-1" data-bs-parent="#menu-accordion">
<ul class="submenu-list list-unstyled">
<li class="submenu-item"><a class="submenu-link" href="{{ url_for('paginas.anade_receta') }}">Canción</a></li>
<li class="submenu-item"><a class="submenu-link" href="{{ url_for('paginas.add_album') }}">Álbum</a></li>
<li class="submenu-item"><a class="submenu-link" href="{{ url_for('paginas.anade_receta') }}">Receta</a></li>
</ul>
</div>
</li><!--//nav-item-->


+ 0
- 1
RecetasPy/servicios/recetaspy/templates/_navegacion.html View File

@ -24,7 +24,6 @@
<!-- <div class="buttons">-->
{% if current_user.is_authenticated %}
<a class="navbar-item" href="{{ url_for('paginas.anade_receta') }}">Añadir receta</a>
<!-- <a class="navbar-item" href="{{ url_for('paginas.add_album') }}">Añadir álbum</a>-->
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">


+ 0
- 36
RecetasPy/servicios/recetaspy/templates/add_album.html View File

@ -1,36 +0,0 @@
{% extends 'base.html' %}
{% block content %}
<div class="column is-4 is-offset-4">
<h3>Añadir nuevo Álbum</h3>
<div class="box">
<form method="POST" enctype="multipart/form-data" action="/add_album">
<div class="text mb-3">
<label for="name">Nombre:</label>
<input class="form-control" type="text" id="name" name="name" required>
</div>
<div class="text mb-3">
<label for="artist">Artista:</label>
<input class="form-control" type="text" id="artist" name="artist" required>
</div>
<div class="text mb-3">
<label for="year">Año:</label>
<input class="form-control" type="number" id="year" name="year" required>
</div>
<div class="text mb-3">
<label for="cover_image">Cover Image:</label>
<input class="form-control" type="file" id="cover_image" name="coverimage">
</div>
<div class="text mb-3">
<button type="submit" class="btn app-btn-primary w-100 theme-btn mx-auto">Añadir álbum</button>
</div>
</form>
</div>
</div>
{% endblock %}

+ 2
- 2
RecetasPy/servicios/recetaspy/templates/index.html View File

@ -9,11 +9,11 @@
<div class="app-card alert alert-dismissible shadow-sm mb-4 border-left-decoration" role="alert">
<div class="inner">
<div class="app-card-body p-3 p-lg-4">
<h3 class="mb-3">¡Bienvenido a la colección de recetas de canciones!</h3>
<h3 class="mb-3">¡Bienvenido a la colección de recetas!</h3>
<div class="row gx-5 gy-3">
<div class="col-12 col-lg-9">
<div>Pensado inicialmente para guardar las recetas de las canciones de Bruce Springsteen.</div>
<div>Todas las recetas las hemos recogido de varias fuentes y probado y corregido.</div>
</div><!--//col-->
</div><!--//row-->
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>


+ 4
- 4
RecetasPy/servicios/recetaspy/templates/signup.html View File

@ -20,8 +20,8 @@
<form class="auth-form auth-signup-form" method="POST" action="/signup">
<div class="email mb-3">
<label class="sr-only" for="signup-name">Usuario</label>
<input id="signup-name" name="username" type="text" class="form-control signup-name" placeholder="Nombre de usuario" required="required">
<label class="sr-only" for="username">Usuario</label>
<input id="username" name="username" type="text" class="form-control signup-name" placeholder="Nombre de usuario" required="required">
</div>
<!--
<div class="email mb-3">
@ -31,7 +31,7 @@
-->
<div class="password mb-3">
<label class="sr-only" for="password">Password</label>
<input id="signup-password" name="password" type="password" class="form-control signup-password" placeholder="Crea una password" required="required">
<input id="password" name="password" type="password" class="form-control signup-password" placeholder="Crea una password" required="required">
</div>
<div class="password mb-3">
@ -46,7 +46,7 @@
<div class="text mb-3">
<label for="fotoperfil">Foto de perfil:</label>
<input id="fotoperfil"
<input
name="fotoperfil"
type="file"
class="form-control"


Loading…
Cancel
Save