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


```python
from flask import Flask, request, redirect, session, render_template_string

app = Flask(__name__)
app.secret_key = "shop-secret-key-change-me"

USERS = [
    {
        "login": "admin",
        "password": "1234",
        "full_name": "Администратор"
    }
]

PRODUCTS = [
    {
        "category": "Напитки",
        "name": "Вода",
        "description": "Питьевая вода",
        "manufacturer": "Аква",
        "supplier": "Поставщик 1",
        "price": 50.00,
        "unit": "шт.",
        "quantity": 20,
        "discount": 5
    },
    {
        "category": "Продукты",
        "name": "Шоколад",
        "description": "Молочный шоколад",
        "manufacturer": "Сладость",
        "supplier": "Поставщик 2",
        "price": 120.00,
        "unit": "шт.",
        "quantity": 0,
        "discount": 20
    },
    {
        "category": "Бытовая химия",
        "name": "Мыло",
        "description": "Мыло для рук",
        "manufacturer": "Чистота",
        "supplier": "Поставщик 3",
        "price": 80.00,
        "unit": "шт.",
        "quantity": 15,
        "discount": 18
    }
]

HTML = """
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ title }}</title>
<style>
body {
    font-family: Arial, sans-serif;
    background: #f2f2f2;
    margin: 0;
    padding: 20px;
}
.container {
    max-width: 900px;
    margin: auto;
}
.box {
    background: white;
    padding: 22px;
    border-radius: 8px;
    margin-bottom: 15px;
    box-shadow: 0 2px 5px #ccc;
}
input, button {
    box-sizing: border-box;
    padding: 10px;
    margin: 5px 0;
    width: 100%;
}
button {
    background: #2878c8;
    color: white;
    border: none;
    cursor: pointer;
    border-radius: 4px;
}
button:hover {
    background: #185a99;
}
.product {
    display: flex;
    justify-content: space-between;
    gap: 15px;
    padding: 15px;
    margin-bottom: 10px;
    border: 1px solid #999;
    border-radius: 5px;
    overflow-wrap: anywhere;
}
.info { flex: 1; }
.discount {
    min-width: 75px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    font-weight: bold;
}
.out { background: #ADD8E6; }
.sale { background: #FFDEAD; }
.normal { background: white; }
.error { color: #c00; }
@media(max-width: 500px) {
    .product { flex-direction: column; }
    .discount { padding: 10px; }
}
</style>
</head>
<body>
<div class="container">
{% if not user %}
    <div class="box">
        <h2>Вход в систему</h2>
        {% if error %}<p class="error">{{ error }}</p>{% endif %}
        <form method="post" action="/login">
            <label>Логин</label>
            <input name="login" required>
            <label>Пароль</label>
            <input type="password" name="password" required>
            <button type="submit">Войти</button>
        </form>
        <form method="post" action="/guest">
            <button type="submit">Войти как гость</button>
        </form>
        <p>Тестовый вход: admin / 1234</p>
    </div>
{% else %}
    <div class="box">
        <h2>Список товаров</h2>
        <p>Пользователь: {{ user }}</p>
        <form method="post" action="/logout">
            <button type="submit">Выход</button>
        </form>
    </div>

    {% for p in products %}
        <div class="product
        {% if p.quantity == 0 %}out
        {% elif p.discount > 17 %}sale
        {% else %}normal{% endif %}">
            <div class="info">
                <strong>{{ p.category }} | {{ p.name }}</strong>
                <p>Описание: {{ p.description }}</p>
                <p>Производитель: {{ p.manufacturer }}</p>
                <p>Поставщик: {{ p.supplier }}</p>
                <p>Цена: {{ "%.2f"|format(p.price) }}</p>
                <p>Единица измерения: {{ p.unit }}</p>
                <p>Количество на складе: {{ p.quantity }}</p>
            </div>
            <div class="discount">{{ p.discount }}%</div>
        </div>
    {% endfor %}
{% endif %}
</div>
</body>
</html>
"""


@app.route("/")
def index():
    return render_template_string(
        HTML,
        title="Список товаров",
        user=session.get("user"),
        products=PRODUCTS,
        error=None
    )


@app.route("/login", methods=["POST"])
def login():
    login_name = request.form.get("login", "").strip()
    password = request.form.get("password", "")

    for user in USERS:
        if user["login"] == login_name and user["password"] == password:
            session["user"] = user["full_name"]
            return redirect("/")

    return render_template_string(
        HTML,
        title="Авторизация",
        user=None,
        products=PRODUCTS,
        error="Неверный логин или пароль"
    ), 401


@app.route("/guest", methods=["POST"])
def guest():
    session["user"] = "Гость"
    return redirect("/")


@app.route("/logout", methods=["POST"])
def logout():
    session.clear()
    return redirect("/")


if __name__ == "__main__":
    app.run(debug=False, host="127.0.0.1", port=5000)
```