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_bp = Blueprint(
|
||||||
"admin",
|
"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"])
|
@admin_bp.route("/food_items", methods=["GET"])
|
||||||
def food_items():
|
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)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
username = db.Column(db.String(150), unique=True, nullable=False)
|
username = db.Column(db.String(150), unique=True, nullable=False)
|
||||||
password = db.Column(db.String, 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__()
|
super().__init__()
|
||||||
self.username = username
|
self.username = username
|
||||||
self.password = generate_password_hash(password=password)
|
self.password = generate_password_hash(password=password)
|
||||||
|
self.is_admin = is_admin
|
||||||
|
|
||||||
def check_password(self, password: str) -> bool:
|
def check_password(self, password: str) -> bool:
|
||||||
return check_password_hash(pwhash=self.password, password=password)
|
return check_password_hash(pwhash=self.password, password=password)
|
||||||
@@ -32,14 +36,10 @@ class FoodItems(db.Model):
|
|||||||
__tablename__ = "food_item"
|
__tablename__ = "food_item"
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
name = db.Column(db.String(150), unique=True, nullable=False)
|
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)
|
energy_100g = db.Column(db.Float)
|
||||||
unit = db.relationship("Units")
|
protein_100g = db.Column(db.Float)
|
||||||
|
carbs_100g = db.Column(db.Float)
|
||||||
energy = db.Column(db.Float)
|
sugar_100g = db.Column(db.Float)
|
||||||
protein = db.Column(db.Float)
|
fats_100g = db.Column(db.Float)
|
||||||
carbs = db.Column(db.Float)
|
saturated_fats_100g = db.Column(db.Float)
|
||||||
sugar = db.Column(db.Float)
|
|
||||||
fats = db.Column(db.Float)
|
|
||||||
saturated_fats = db.Column(db.Float)
|
|
||||||
|
|||||||
8
seed.py
8
seed.py
@@ -1,7 +1,11 @@
|
|||||||
from application import db, app
|
from application import db, app
|
||||||
from models import User
|
from models import User, FoodItems
|
||||||
|
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
User.query.delete()
|
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()
|
db.session.commit()
|
||||||
|
|||||||
Reference in New Issue
Block a user