Kgshop commited on
Commit
bb0ea89
·
verified ·
1 Parent(s): 69b0633

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -36
app.py CHANGED
@@ -951,7 +951,7 @@ def product_detail(index):
951
  @app.route('/admin', methods=['GET', 'POST'])
952
  def admin():
953
  data = load_data()
954
- products = data.get('products', [])
955
  categories = data.get('categories', [])
956
 
957
  if request.method == 'POST':
@@ -1047,18 +1047,12 @@ def admin():
1047
  return redirect(url_for('admin'))
1048
 
1049
  elif action == 'edit':
1050
- product_id = request.form.get('product_id')
1051
- if not product_id:
1052
- return "Ошибка: ID товара не был передан.", 400
1053
-
1054
- product_to_edit = None
1055
- for p in products:
1056
- if p.get('added_at') == product_id:
1057
- product_to_edit = p
1058
- break
1059
-
1060
- if not product_to_edit:
1061
- return "Ошибка: Товар с ID '{product_id}' не найден для редактирования.", 404
1062
 
1063
  name = request.form.get('name', '').strip()
1064
  price_str = request.form.get('price', '').strip()
@@ -1077,7 +1071,7 @@ def admin():
1077
  except ValueError:
1078
  return "Ошибка: Неверный формат цены. Используйте число (например, 150 или 150.50).", 400
1079
 
1080
- new_photos_list = product_to_edit.get('photos', [])
1081
 
1082
  if photos_files and any(f.filename for f in photos_files):
1083
  new_photos_list = []
@@ -1110,30 +1104,26 @@ def admin():
1110
  except OSError as e:
1111
  logging.error(f"Ошибка при удалении временного файла {temp_path} при редактировании: {e}")
1112
 
1113
- product_to_edit['name'] = name
1114
- product_to_edit['price'] = price_float
1115
- product_to_edit['description'] = description
1116
- product_to_edit['category'] = category if category in categories else 'Без категории'
1117
- product_to_edit['photos'] = new_photos_list
1118
- product_to_edit['colors'] = colors
1119
 
1120
  save_data({'products': products, 'categories': categories})
1121
  return redirect(url_for('admin'))
1122
 
1123
  elif action == 'delete':
1124
- product_id = request.form.get('product_id')
1125
- if not product_id:
1126
- return "Ошибка: ID товара не передан для удаления.", 400
1127
-
1128
- original_length = len(products)
1129
- products[:] = [p for p in products if p.get('added_at') != product_id]
1130
-
1131
- if len(products) == original_length:
1132
- logging.warning(f"Товар с ID '{product_id}' для удаления не найден.")
1133
- return "Ошибка: Товар для удаления не найден.", 404
1134
-
1135
  try:
 
 
 
 
 
1136
  save_data({'products': products, 'categories': categories})
 
 
1137
  except Exception as e:
1138
  logging.error(f"Ошибка при удалении товара: {e}")
1139
  return "Ошибка при удалении товара", 500
@@ -1442,7 +1432,6 @@ def admin():
1442
  padding: 0;
1443
  margin: 0;
1444
  box-shadow: none;
1445
- display: flex;
1446
  }
1447
  .button-group button,
1448
  .button-group summary {
@@ -1565,8 +1554,7 @@ def admin():
1565
 
1566
  <h2>Список товаров</h2>
1567
  <div class="product-list">
1568
- {% set sorted_admin_products = products|sort(attribute='added_at', reverse=True) %}
1569
- {% for product in sorted_admin_products %}
1570
  <div class="product-item">
1571
  <h3>{{ product['name'] }}</h3>
1572
  <p><strong>Категория:</strong> {{ product.get('category', 'Без категории') }}</p>
@@ -1590,7 +1578,7 @@ def admin():
1590
  <summary><i class="fas fa-edit"></i> Редактировать</summary>
1591
  <form method="POST" enctype="multipart/form-data" class="edit-form">
1592
  <input type="hidden" name="action" value="edit">
1593
- <input type="hidden" name="product_id" value="{{ product.get('added_at') }}">
1594
  <label for="edit-name-{{ loop.index0 }}">Название:</label>
1595
  <input type="text" id="edit-name-{{ loop.index0 }}" name="name" value="{{ product['name'] }}" required>
1596
  <label for="edit-price-{{ loop.index0 }}">Цена (с):</label>
@@ -1629,7 +1617,7 @@ def admin():
1629
  </details>
1630
  <form method="POST" onsubmit="return confirm('Вы уверены, что хотите удалить товар \'{{ product['name'] }}\'?');">
1631
  <input type="hidden" name="action" value="delete">
1632
- <input type="hidden" name="product_id" value="{{ product.get('added_at') }}">
1633
  <button type="submit" class="delete-button"><i class="fas fa-trash-alt"></i> Удалить товар</button>
1634
  </form>
1635
  </div>
 
951
  @app.route('/admin', methods=['GET', 'POST'])
952
  def admin():
953
  data = load_data()
954
+ products = sorted(data.get('products', []), key=lambda p: p.get('added_at', ''), reverse=True)
955
  categories = data.get('categories', [])
956
 
957
  if request.method == 'POST':
 
1047
  return redirect(url_for('admin'))
1048
 
1049
  elif action == 'edit':
1050
+ try:
1051
+ index = int(request.form.get('index'))
1052
+ if not 0 <= index < len(products):
1053
+ return "Ошибка: Неверный индекс товара для редактирования.", 400
1054
+ except (ValueError, TypeError):
1055
+ return "Ошибка: Неверный индекс товара.", 400
 
 
 
 
 
 
1056
 
1057
  name = request.form.get('name', '').strip()
1058
  price_str = request.form.get('price', '').strip()
 
1071
  except ValueError:
1072
  return "Ошибка: Неверный формат цены. Используйте число (например, 150 или 150.50).", 400
1073
 
1074
+ new_photos_list = products[index].get('photos', [])
1075
 
1076
  if photos_files and any(f.filename for f in photos_files):
1077
  new_photos_list = []
 
1104
  except OSError as e:
1105
  logging.error(f"Ошибка при удалении временного файла {temp_path} при редактировании: {e}")
1106
 
1107
+ products[index]['name'] = name
1108
+ products[index]['price'] = price_float
1109
+ products[index]['description'] = description
1110
+ products[index]['category'] = category if category in categories else 'Без категории'
1111
+ products[index]['photos'] = new_photos_list
1112
+ products[index]['colors'] = colors
1113
 
1114
  save_data({'products': products, 'categories': categories})
1115
  return redirect(url_for('admin'))
1116
 
1117
  elif action == 'delete':
 
 
 
 
 
 
 
 
 
 
 
1118
  try:
1119
+ index = int(request.form.get('index'))
1120
+ if not 0 <= index < len(products):
1121
+ return "Ошибка: Неверный индекс товара для удаления.", 400
1122
+
1123
+ del products[index]
1124
  save_data({'products': products, 'categories': categories})
1125
+ except (ValueError, TypeError):
1126
+ return "Ошибка: Неверный индекс товара.", 400
1127
  except Exception as e:
1128
  logging.error(f"Ошибка при удалении товара: {e}")
1129
  return "Ошибка при удалении товара", 500
 
1432
  padding: 0;
1433
  margin: 0;
1434
  box-shadow: none;
 
1435
  }
1436
  .button-group button,
1437
  .button-group summary {
 
1554
 
1555
  <h2>Список товаров</h2>
1556
  <div class="product-list">
1557
+ {% for product in products %}
 
1558
  <div class="product-item">
1559
  <h3>{{ product['name'] }}</h3>
1560
  <p><strong>Категория:</strong> {{ product.get('category', 'Без категории') }}</p>
 
1578
  <summary><i class="fas fa-edit"></i> Редактировать</summary>
1579
  <form method="POST" enctype="multipart/form-data" class="edit-form">
1580
  <input type="hidden" name="action" value="edit">
1581
+ <input type="hidden" name="index" value="{{ loop.index0 }}">
1582
  <label for="edit-name-{{ loop.index0 }}">Название:</label>
1583
  <input type="text" id="edit-name-{{ loop.index0 }}" name="name" value="{{ product['name'] }}" required>
1584
  <label for="edit-price-{{ loop.index0 }}">Цена (с):</label>
 
1617
  </details>
1618
  <form method="POST" onsubmit="return confirm('Вы уверены, что хотите удалить товар \'{{ product['name'] }}\'?');">
1619
  <input type="hidden" name="action" value="delete">
1620
+ <input type="hidden" name="index" value="{{ loop.index0 }}">
1621
  <button type="submit" class="delete-button"><i class="fas fa-trash-alt"></i> Удалить товар</button>
1622
  </form>
1623
  </div>