Загрузка данных



#!                                                                              
from flask import Flask, render_template, request, redirect, flash, url_for, session
from sqlmodel import Field, SQLModel, Session, select, create_engine


app = Flask(__name__)
app.secret_key = 'opfgiwre0fwejf09-wej0fwe09fh02408f0892eb098fwe908fg809we'

sqlite_url = "sqlite:///database.db"
engine = create_engine(sqlite_url)

#! ДОПИСАТЬ С НИКИТОЙ -----------------------------

#! Модель пользователя
class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    username: str = Field(index=True, unique=True)
    password: str

class Products(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    name: str
    memory: str
    price: str

#! Создаем таблицы при запуске
with app.app_context():
    SQLModel.metadata.create_all(engine)
    

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username'] #! Nikita
        password = request.form['password'] #! 12345
        password1 = request.form['password1'] #! 12345
        
        with Session(engine) as db_session:
            #! Проверка, нет ли такого пользователя
            statement = select(User).where(User.username == username) #! True или False
            #! 
            existing_user = db_session.exec(statement).first()
            if existing_user:
                return "Пользователь уже существует!"
            
            if password != password1:
                return "Пароли не совпадают!"
            
            #!         User(username="Nikita", password="12345")
            new_user = User(username=username, password=password)
            #! ДОБАВЛЯЕМ ЧЕЛОВЕКА В БАЗУ ДАННЫХ
            db_session.add(new_user)
            #! СОХРАНЯЕМ БАЗУ ДАННЫХ
            db_session.commit()
            return redirect(url_for('login'))
            
    return render_template('register.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        
        with Session(engine) as db_session:
            statement = select(User).where(User.username == username, User.password == password) #! True
            user = db_session.exec(statement).first()
            
            if user:
                session['user_id'] = user.id
                session['username'] = user.username
                return redirect(url_for('index'))
            else:
                return "Неверный логин или пароль"
                
    return render_template('login.html')

@app.route('/logout')
def logout():
    session.clear()
    return redirect(url_for('login'))




#!-----------------------------

@app.route('/')
def index():
    #! ЭТО ТОЖЕ
    user_id = session.get('user_id')
    username = session.get('username')
    #! ----------------------                  ЭТО ТОЖЕ
    #! В index.html дописать немного код
    return render_template('index.html', username=username)

@app.route('/about')
def about():
    return render_template('about.html')


@app.route('/username/<username>/<cart>')
def user(username, cart):
    cart_list = cart.split(' ') 
    return f"Пользователь: {username}. Корзина: {cart_list}"

phones = []

@app.route('/add', methods=['GET', 'POST'])
def add_phone():
    if request.method == 'POST':
        name = request.form['name']
        memory = request.form['memory']
        price = request.form['price']
        
        with Session(engine) as db_session:
            new_product = Products(
                name=name, 
                memory=memory, 
                price=price,
            )
            db_session.add(new_product)
            db_session.commit()
        return redirect('/add')
    
    #! --- ИЗМЕНЕНИЯ ТУТ ---
    # Получаем все товары из базы данных
    with Session(engine) as db_session:
        statement = select(Products)
        all_products = db_session.exec(statement).all()

    return render_template('add_product.html', phones=all_products)

if __name__ == '__main__':
  app.run(debug=True)