Aleksmorshen commited on
Commit
eb6f5b8
·
verified ·
1 Parent(s): 5b76bd8

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -58
app.py CHANGED
@@ -2,7 +2,7 @@ from flask import Flask, request, redirect
2
  import json
3
  import os
4
 
5
- app = Flask(__name__)
6
  DB_FILE = 'data.json'
7
 
8
  # Функция для создания нового JSON-файла
@@ -21,8 +21,8 @@ def load_products():
21
  try:
22
  with open(DB_FILE, 'r') as f:
23
  products = json.load(f)
24
- print(f"Данные успешно загружены из {DB_FILE}: {products}") # Отладочное сообщение
25
- return products
26
  except (json.JSONDecodeError, Exception) as e:
27
  print(f"Ошибка при чтении файла {DB_FILE}: {e}")
28
  return []
@@ -39,32 +39,32 @@ def save_products(products):
39
  # Вспомогательная функция для обёртки HTML-контента
40
  def html_wrapper(content):
41
  return f'''
42
- <!DOCTYPE html>
43
- <html>
44
- <head>
45
- <title>Каталог</title>
46
- <style>
47
- body {{ font-family: Arial, sans-serif; margin: 20px; }}
48
- .header {{ font-size: 24px; margin-bottom: 20px; }}
49
- .products {{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }}
50
- .product {{ border: 1px solid #ddd; padding: 15px; border-radius: 5px; }}
51
- .product img {{ max-width: 200px; max-height: 200px; }}
52
- form {{ max-width: 500px; margin: 20px auto; }}
53
- input, textarea {{ width: 100%; margin: 5px 0; padding: 8px; }}
54
- button {{ background: #4CAF50; color: white; padding: 10px; border: none; cursor: pointer; }}
55
- nav {{ margin-bottom: 20px; }}
56
- a {{ margin-right: 15px; text-decoration: none; color: #333; }}
57
- </style>
58
- </head>
59
- <body>
60
- <nav>
61
- <a href="/">Каталог</a>
62
- <a href="/admin">Админка</a>
63
- </nav>
64
- {content}
65
- </body>
66
- </html>
67
- '''
68
 
69
  # Маршрут для отображения каталога товаров
70
  @app.route('/')
@@ -74,49 +74,54 @@ def catalog():
74
  return html_wrapper('<div class="header">Каталог товаров пуст</div>')
75
  products_html = ''.join([
76
  f'''<div class="product">
77
- <h3>{p['name']}</h3>
78
- <img src="{p['image']}">
79
- <p>{p['description']}</p>
80
- <p>Цена: {p['price']} руб.</p>
81
- </div>'''
82
  for p in products
83
  ])
84
  return html_wrapper(f'''
85
- <div class="header">Каталог товаров</div>
86
- <div class="products">{products_html}</div>
87
- ''')
88
 
89
  # Маршрут для админ-панели (добавление товаров)
90
  @app.route('/admin', methods=['GET', 'POST'])
91
  def admin():
92
  if request.method == 'POST':
93
  products = load_products()
 
94
  # Добавляем новый товар из формы
95
- new_product = {
96
- 'name': request.form['name'],
97
- 'description': request.form['description'],
98
- 'price': request.form['price'],
99
- 'image': request.form['image']
100
- }
101
- products.append(new_product)
102
- save_products(products)
103
- return redirect('/admin')
 
 
 
104
 
105
- return html_wrapper('''
106
- <div class="header">Админ-панель</div>
107
- <form method="POST">
108
- <input type="text" name="name" placeholder="Название" required>
109
- <textarea name="description" placeholder="Описание" required></textarea>
110
- <input type="number" name="price" placeholder="Цена" required>
111
- <input type="url" name="image" placeholder="URL изображения" required>
112
- <button type="submit">Добавить товар</button>
113
- </form>
114
  ''')
115
 
116
  # Точка входа в приложение
117
- if __name__ == '__main__':
 
118
  # Проверяем наличие файла при запуске и создаём его при необходимости
119
  if not os.path.exists(DB_FILE):
120
  initialize_db()
121
-
122
- app.run(host='0.0.0.0', port=7860, debug=True) # Включаем debug-режим
 
2
  import json
3
  import os
4
 
5
+ app = Flask(__name__) # Исправлено: __name__
6
  DB_FILE = 'data.json'
7
 
8
  # Функция для создания нового JSON-файла
 
21
  try:
22
  with open(DB_FILE, 'r') as f:
23
  products = json.load(f)
24
+ print(f"Данные успешно загружены из {DB_FILE}: {products}") # Отладочное сообщение
25
+ return products
26
  except (json.JSONDecodeError, Exception) as e:
27
  print(f"Ошибка при чтении файла {DB_FILE}: {e}")
28
  return []
 
39
  # Вспомогательная функция для обёртки HTML-контента
40
  def html_wrapper(content):
41
  return f'''
42
+ <!DOCTYPE html>
43
+ <html>
44
+ <head>
45
+ <title>Каталог</title>
46
+ <style>
47
+ body {{ font-family: Arial, sans-serif; margin: 20px; }}
48
+ .header {{ font-size: 24px; margin-bottom: 20px; }}
49
+ .products {{ display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }}
50
+ .product {{ border: 1px solid #ddd; padding: 15px; border-radius: 5px; }}
51
+ .product img {{ max-width: 200px; max-height: 200px; }}
52
+ form {{ max-width: 500px; margin: 20px auto; }}
53
+ input, textarea {{ width: 100%; margin: 5px 0; padding: 8px; }}
54
+ button {{ background: #4CAF50; color: white; padding: 10px; border: none; cursor: pointer; }}
55
+ nav {{ margin-bottom: 20px; }}
56
+ a {{ margin-right: 15px; text-decoration: none; color: #333; }}
57
+ </style>
58
+ </head>
59
+ <body>
60
+ <nav>
61
+ <a href="/">Каталог</a>
62
+ <a href="/admin">Админка</a>
63
+ </nav>
64
+ {content}
65
+ </body>
66
+ </html>
67
+ '''
68
 
69
  # Маршрут для отображения каталога товаров
70
  @app.route('/')
 
74
  return html_wrapper('<div class="header">Каталог товаров пуст</div>')
75
  products_html = ''.join([
76
  f'''<div class="product">
77
+ <h3>{p['name']}</h3>
78
+ <img src="{p['image']}">
79
+ <p>{p['description']}</p>
80
+ <p>Цена: {p['price']} руб.</p>
81
+ </div>'''
82
  for p in products
83
  ])
84
  return html_wrapper(f'''
85
+ <div class="header">Каталог товаров</div>
86
+ <div class="products">{products_html}</div>
87
+ ''')
88
 
89
  # Маршрут для админ-панели (добавление товаров)
90
  @app.route('/admin', methods=['GET', 'POST'])
91
  def admin():
92
  if request.method == 'POST':
93
  products = load_products()
94
+
95
  # Добавляем новый товар из формы
96
+ try:
97
+ new_product = {
98
+ 'name': request.form['name'],
99
+ 'description': request.form['description'],
100
+ 'price': float(request.form['price']), # Преобразуем цену в число
101
+ 'image': request.form['image']
102
+ }
103
+ products.append(new_product)
104
+ save_products(products)
105
+ return redirect('/admin')
106
+ except ValueError as e:
107
+ return html_wrapper(f'<div class="header">Ошибка: {e}</div>')
108
 
109
+ return html_wrapper('''
110
+ <div class="header">Админ-панель</div>
111
+ <form method="POST">
112
+ <input type="text" name="name" placeholder="Название" required>
113
+ <textarea name="description" placeholder="Описание" required></textarea>
114
+ <input type="number" name="price" placeholder="Цена" required>
115
+ <input type="url" name="image" placeholder="URL изображения" required>
116
+ <button type="submit">Добавить товар</button>
117
+ </form>
118
  ''')
119
 
120
  # Точка входа в приложение
121
+ if __name__ == '__main__': # Исправлено: __name__
122
+
123
  # Проверяем наличие файла при запуске и создаём его при необходимости
124
  if not os.path.exists(DB_FILE):
125
  initialize_db()
126
+
127
+ app.run(host='0.0.0.0', port=7860, debug=True) # Включаем debug-режим