File size: 4,251 Bytes
2a32f00
 
 
8b919e0
2a32f00
 
8b919e0
2a32f00
 
 
 
 
 
 
8b919e0
2a32f00
 
 
 
 
 
 
 
 
 
8b919e0
2a32f00
 
 
 
 
 
 
8b919e0
2a32f00
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8b919e0
2a32f00
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9509b14
2a32f00
 
 
 
 
 
 
 
 
 
 
 
 
 
9509b14
2a32f00
 
 
 
 
 
 
 
 
9509b14
 
2a32f00
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from flask import Flask, request, redirect
import json
import os

app = Flask(__name__)
DB_FILE = 'data.json'

# Функция для создания нового JSON-файла
def initialize_db():
    try:
        with open(DB_FILE, 'w') as f:
            json.dump([], f)  # Создаём пустой массив в файле
    except Exception as e:
        print(f"Ошибка при создании файла {DB_FILE}: {e}")

# Функция для загрузки данных из файла
def load_products():
    if not os.path.exists(DB_FILE):  # Если файл не существует, создаём его
        initialize_db()
    try:
        with open(DB_FILE, 'r') as f:
            return json.load(f)
    except (json.JSONDecodeError, Exception) as e:
        print(f"Ошибка при чтении файла {DB_FILE}: {e}")
        return []

# Функция для сохранения данных в файл
def save_products(products):
    try:
        with open(DB_FILE, 'w') as f:
            json.dump(products, f)
    except Exception as e:
        print(f"Ошибка при записи в файл {DB_FILE}: {e}")

# Вспомогательная функция для обёртки HTML-контента
def html_wrapper(content):
    return f'''
    <!DOCTYPE html>
    <html>
    <head>
    <title>Каталог</title>
    <style>
    body {{ font-family: Arial, sans-serif; margin: 20px; }}
    .header {{ font-size: 24px; margin-bottom: 20px; }}
    .products {{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }}
    .product {{ border: 1px solid #ddd; padding: 15px; border-radius: 5px; }}
    .product img {{ max-width: 200px; max-height: 200px; }}
    form {{ max-width: 500px; margin: 20px auto; }}
    input, textarea {{ width: 100%; margin: 5px 0; padding: 8px; }}
    button {{ background: #4CAF50; color: white; padding: 10px; border: none; cursor: pointer; }}
    nav {{ margin-bottom: 20px; }}
    a {{ margin-right: 15px; text-decoration: none; color: #333; }}
    </style>
    </head>
    <body>
    <nav>
        <a href="/">Каталог</a>
        <a href="/admin">Админка</a>
    </nav>
    {content}
    </body>
    </html>
    '''

# Маршрут для отображения каталога товаров
@app.route('/')
def catalog():
    products = load_products()
    products_html = ''.join([
        f'''<div class="product">
        <h3>{p['name']}</h3>
        <img src="{p['image']}">
        <p>{p['description']}</p>
        <p>Цена: {p['price']} руб.</p>
        </div>'''
        for p in products
    ])
    return html_wrapper(f'''
    <div class="header">Каталог товаров</div>
    <div class="products">{products_html}</div>
    ''')

# Маршрут для админ-панели (добавление товаров)
@app.route('/admin', methods=['GET', 'POST'])
def admin():
    if request.method == 'POST':
        products = load_products()
        # Добавляем новый товар из формы
        products.append({
            'name': request.form['name'],
            'description': request.form['description'],
            'price': request.form['price'],
            'image': request.form['image']
        })
        save_products(products)
        return redirect('/admin')

    return html_wrapper('''  
        <div class="header">Админ-панель</div>  
        <form method="POST">  
            <input type="text" name="name" placeholder="Название" required>  
            <textarea name="description" placeholder="Описание" required></textarea>  
            <input type="number" name="price" placeholder="Цена" required>  
            <input type="url" name="image" placeholder="URL изображения" required>  
            <button type="submit">Добавить товар</button>  
        </form>  
''')

# Точка входа в приложение
if __name__ == '__main__':
    # Проверяем наличие файла при запуске и создаём его при необходимости
    if not os.path.exists(DB_FILE):
        initialize_db()
    
    app.run(host='0.0.0.0', port=7860)