Загрузка данных
from flask import Flask, render_template, redirect, url_for, request, flash, session
from sqlmodel import Session, select
from models import User, Product, engine, create_db_and_tables
app = Flask(__name__)
app.secret_key = "pofwejpofewpojfjpowejpofyu9023h0f2"
#! ОПРЕДЕЛЯЕТ ТЫ АДМИН ИЛИ ПОЛЬЗОВАТЕЛЬ
def get_current_user():
if "user_id" in session:
with Session(engine) as db_session:
return db_session.get(User, session["user_id"])
return None
@app.route("/")
def index():
with Session(engine) as db_session:
products = db_session.exec(select(Product)).all()
return render_template("index.html", products=products, user=get_current_user())
@app.route("/admin", methods=["GET", "POST"])
def admin():
user = get_current_user()
if not user or not user.is_admin:
return "Доступ запрещен", 403
if request.method == "POST":
with Session(engine) as db_session:
new_product = Product(
name=request.form["name"],
description=request.form["description"],
price=float(request.form["price"]),
main_image=request.form["main_image"],
image_2=request.form.get("image_2"),
image_3=request.form.get("image_3"),
image_4=request.form.get("image_4")
)
db_session.add(new_product)
db_session.commit()
return redirect(url_for("admin"))
with Session(engine) as db_session:
products = db_session.exec(select(Product)).all()
return render_template("admin.html", products=products, user=user)
@app.route("/register", methods=["GET", "POST"])
def register():
if request.method == "POST":
with Session(engine) as db_session:
#! Если пользователей еще нет, первый станет админом
is_first = db_session.exec(select(User)).first() is None
new_user = User(
username=request.form["username"],
password=request.form["password"],
is_admin=is_first
)
db_session.add(new_user)
db_session.commit()
flash("Регистрация успешна! Войдите в аккаунт.")
return redirect(url_for("login"))
return render_template("register.html")
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
with Session(engine) as db_session:
#! Проверяем, есть ли такой пользователь
#! если мы нашли человека, то вытаскиваем его из базы
user = db_session.exec(
select(User).where(
User.username == request.form["username"]
)
).first()
#! если Тимофей == Тимофей и 12345 == 12345
if user and user.password == request.form["password"]:
session["user_id"] = user.id #! сохраняем в браузере информацию о человеке
return redirect(url_for("index")) #! переводим человека на главную страницу
flash("Неверный логин или пароль")
return render_template("login.html")
@app.route("/product/<int:product_id>")
def product_detail(product_id):
with Session(engine) as db_session:
product = db_session.get(Product, product_id)
if not product:
return "Товар не найден", 404
return render_template("product.html", product=product, user=get_current_user())
@app.route("/logout")
def logout():
session.clear()
return redirect(url_for("index"))
if __name__ == "__main__":
create_db_and_tables()
app.run(debug=True)