u
This commit is contained in:
49
proiect-nutritie/app/main.py
Normal file
49
proiect-nutritie/app/main.py
Normal file
@@ -0,0 +1,49 @@
|
||||
from flask import Flask, render_template, request
|
||||
|
||||
import os
|
||||
# Îi spunem clar că templates este în același folder cu main.py
|
||||
template_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'templates'))
|
||||
app = Flask(__name__, template_folder=template_dir)
|
||||
|
||||
# Funcția care calculează caloriile (Formula Mifflin-St Jeor)
|
||||
def calculeaza_target(data):
|
||||
w = float(data.get('weight'))
|
||||
h = float(data.get('height'))
|
||||
a = int(data.get('age'))
|
||||
gen = data.get('gender')
|
||||
act = float(data.get('activity'))
|
||||
scop = data.get('goal')
|
||||
|
||||
# Calcul BMR (Basal Metabolic Rate)
|
||||
if gen == 'masculin':
|
||||
bmr = (10 * w) + (6.25 * h) - (5 * a) + 5
|
||||
else:
|
||||
bmr = (10 * w) + (6.25 * h) - (5 * a) - 161
|
||||
|
||||
# TDEE (Total Daily Energy Expenditure)
|
||||
tdee = bmr * act
|
||||
|
||||
# Ajustare în funcție de scop (slăbire/îngrășare)
|
||||
if scop == 'slabire':
|
||||
return round(tdee - 500)
|
||||
elif scop == 'ingrasare':
|
||||
return round(tdee + 500)
|
||||
else:
|
||||
return round(tdee)
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
return render_template('index.html')
|
||||
|
||||
@app.route('/calculate', methods=['POST'])
|
||||
def calculate():
|
||||
try:
|
||||
data = request.form
|
||||
kcal_final = calculeaza_target(data)
|
||||
# Trimitem rezultatul înapoi în pagina index.html
|
||||
return render_template('index.html', rezultat=kcal_final, date_introduse=data)
|
||||
except Exception as e:
|
||||
return f"A apărut o eroare: {e}", 400
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=5000)
|
||||
64
proiect-nutritie/app/templates/index.html
Normal file
64
proiect-nutritie/app/templates/index.html
Normal file
@@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ro">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Nutriție AI Pro</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
</head>
|
||||
<body class="p-5 bg-light">
|
||||
<div class="container" style="max-width: 600px;">
|
||||
<h1 class="mb-4 text-center">Calculator Kcal & AI Menu</h1>
|
||||
|
||||
<div class="card p-4 shadow-sm">
|
||||
<form action="/calculate" method="post">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Greutate actuală (kg)</label>
|
||||
<input type="number" name="weight" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Înălțime (cm)</label>
|
||||
<input type="number" name="height" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Vârstă</label>
|
||||
<input type="number" name="age" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Sex</label>
|
||||
<select name="gender" class="form-select">
|
||||
<option value="masculin">Masculin</option>
|
||||
<option value="feminin">Feminin</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Nivel activitate</label>
|
||||
<select name="activity" class="form-select">
|
||||
<option value="1.2">Sedentar (birou)</option>
|
||||
<option value="1.55">Activ (3-5 zile sport)</option>
|
||||
<option value="1.9">Extrem (muncă fizică/sport zilnic)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Obiectiv</label>
|
||||
<select name="goal" class="form-select">
|
||||
<option value="mentinere">Menținere</option>
|
||||
<option value="slabire">Slăbire (-500 kcal)</option>
|
||||
<option value="ingrasare">Îngrășare (+500 kcal)</option>
|
||||
</select>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-success w-100">Calculează</button>
|
||||
</form>
|
||||
|
||||
{% if rezultat %}
|
||||
<div class="mt-4 alert alert-info text-center">
|
||||
<h4>Ținta ta: {{ rezultat }} kcal / zi</h4>
|
||||
</div>
|
||||
<hr>
|
||||
<h5>🤖 Cere meniu de la AI (Beta)</h5>
|
||||
<textarea class="form-control mb-2" placeholder="Ex: Sunt vegetarian și nu îmi place broccoli..."></textarea>
|
||||
<button class="btn btn-outline-primary btn-sm">Generează Meniu Săptămânal</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user