mirror of
https://github.com/StefBuwalda/cal_counter.git
synced 2025-10-30 03:10:00 +00:00
Add admin check and update FoodItems model
Introduced an admin_required check for all admin routes using Flask-Login's current_user. Updated the FoodItems model to use per-100g nutritional fields and removed unit relationships. Seed script now creates both admin and regular user accounts.
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from flask import Blueprint, render_template
|
||||
from flask import Blueprint, render_template, abort
|
||||
from flask_login import current_user
|
||||
from models import FoodItems
|
||||
|
||||
admin_bp = Blueprint(
|
||||
"admin",
|
||||
@@ -8,6 +10,13 @@ admin_bp = Blueprint(
|
||||
)
|
||||
|
||||
|
||||
@admin_bp.before_request
|
||||
def admin_required():
|
||||
if not current_user.is_admin:
|
||||
abort(403)
|
||||
|
||||
|
||||
@admin_bp.route("/food_items", methods=["GET"])
|
||||
def food_items():
|
||||
return render_template("food_items.html")
|
||||
items = FoodItems.query.all()
|
||||
return render_template("food_items.html", items=items)
|
||||
|
||||
22
models.py
22
models.py
@@ -8,11 +8,15 @@ class User(UserMixin, db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
username = db.Column(db.String(150), unique=True, nullable=False)
|
||||
password = db.Column(db.String, nullable=False)
|
||||
is_admin = db.Column(db.Boolean, nullable=False, default=False)
|
||||
|
||||
def __init__(self, username: str, password: str):
|
||||
def __init__(
|
||||
self, username: str, password: str, is_admin: bool = False
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.username = username
|
||||
self.password = generate_password_hash(password=password)
|
||||
self.is_admin = is_admin
|
||||
|
||||
def check_password(self, password: str) -> bool:
|
||||
return check_password_hash(pwhash=self.password, password=password)
|
||||
@@ -32,14 +36,10 @@ class FoodItems(db.Model):
|
||||
__tablename__ = "food_item"
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(150), unique=True, nullable=False)
|
||||
amount = db.Column(db.Integer, nullable=False)
|
||||
|
||||
unit_id = db.Column(db.Integer, db.ForeignKey("unit.id"), nullable=False)
|
||||
unit = db.relationship("Units")
|
||||
|
||||
energy = db.Column(db.Float)
|
||||
protein = db.Column(db.Float)
|
||||
carbs = db.Column(db.Float)
|
||||
sugar = db.Column(db.Float)
|
||||
fats = db.Column(db.Float)
|
||||
saturated_fats = db.Column(db.Float)
|
||||
energy_100g = db.Column(db.Float)
|
||||
protein_100g = db.Column(db.Float)
|
||||
carbs_100g = db.Column(db.Float)
|
||||
sugar_100g = db.Column(db.Float)
|
||||
fats_100g = db.Column(db.Float)
|
||||
saturated_fats_100g = db.Column(db.Float)
|
||||
|
||||
8
seed.py
8
seed.py
@@ -1,7 +1,11 @@
|
||||
from application import db, app
|
||||
from models import User
|
||||
from models import User, FoodItems
|
||||
|
||||
with app.app_context():
|
||||
User.query.delete()
|
||||
db.session.add(User("admin", "admin"))
|
||||
db.session.add(User(username="admin", password="admin", is_admin=True))
|
||||
db.session.add(User(username="user", password="user", is_admin=False))
|
||||
|
||||
|
||||
|
||||
db.session.commit()
|
||||
|
||||
Reference in New Issue
Block a user