flpolprojects commited on
Commit
21d6b00
·
verified ·
1 Parent(s): dd12782

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -35
app.py CHANGED
@@ -5,6 +5,11 @@ import threading
5
  import json
6
  from datetime import datetime
7
  import os
 
 
 
 
 
8
 
9
  # Инициализация бота и Flask
10
  BOT_TOKEN = '7734802681:AAGKHGG8O9uNk64JWTHH5yqXzvSxCcoLUdA'
@@ -16,14 +21,21 @@ DATA_FILE = 'data.json'
16
 
17
  # Загрузка или создание данных
18
  def load_data():
19
- if os.path.exists(DATA_FILE):
20
- with open(DATA_FILE, 'r', encoding='utf-8') as f:
21
- return json.load(f)
22
- return {'products': [], 'orders': []}
 
 
 
 
23
 
24
  def save_data(data):
25
- with open(DATA_FILE, 'w', encoding='utf-8') as f:
26
- json.dump(data, f, ensure_ascii=False, indent=4)
 
 
 
27
 
28
  data = load_data()
29
 
@@ -148,23 +160,31 @@ admin_html = """
148
  <button type="submit">Добавить товар</button>
149
  </form>
150
  <h2>Существующие товары</h2>
151
- {% for product in products %}
152
- <div class="product">
153
- {{ product.name }} - {{ product.price }} руб.<br>
154
- {{ product.description }}<br>
155
- <button onclick="deleteProduct({{ product.id }})">Удалить</button>
156
- </div>
157
- {% endfor %}
 
 
 
 
158
  <h2>Заказы</h2>
159
- {% for order in orders %}
160
- <div class="product">
161
- Пользователь: {{ order.user_id }}<br>
162
- Дата: {{ order.date }}<br>
163
- Товары: {% for item in order.items %}
164
- {{ item.quantity }} x {{ [p.name for p in products if p.id == item.product_id][0] }}<br>
 
 
 
165
  {% endfor %}
166
- </div>
167
- {% endfor %}
 
168
  </div>
169
  <script>
170
  document.getElementById('addProductForm').onsubmit = async (e) => {
@@ -184,31 +204,49 @@ admin_html = """
184
 
185
  @app.route('/')
186
  def admin_panel():
187
- return render_template_string(admin_html, products=data['products'], orders=data['orders'])
 
 
 
 
188
 
189
  @app.route('/add_product', methods=['POST'])
190
  def add_product():
191
- if request.method == 'POST':
192
- name = request.form['name']
193
- price = float(request.form['price'])
194
- description = request.form['description']
195
- product_id = max((p['id'] for p in data['products']), default=0) + 1
196
- data['products'].append({'id': product_id, 'name': name, 'price': price, 'description': description})
197
- save_data(data)
198
- return jsonify({'status': 'success'})
 
 
 
 
199
 
200
  @app.route('/delete_product/<int:product_id>', methods=['POST'])
201
  def delete_product(product_id):
202
- data['products'] = [p for p in data['products'] if p['id'] != product_id]
203
- save_data(data)
204
- return jsonify({'status': 'success'})
 
 
 
 
205
 
206
  # Запуск бота и Flask в разных потоках
207
  def run_bot():
208
- bot.polling(none_stop=True)
 
 
 
209
 
210
  def run_flask():
211
- app.run(host='0.0.0.0', port=7860)
 
 
 
212
 
213
  if __name__ == '__main__':
214
  bot_thread = threading.Thread(target=run_bot)
 
5
  import json
6
  from datetime import datetime
7
  import os
8
+ import logging
9
+
10
+ # Настройка логирования
11
+ logging.basicConfig(level=logging.INFO)
12
+ logger = logging.getLogger(__name__)
13
 
14
  # Инициализация бота и Flask
15
  BOT_TOKEN = '7734802681:AAGKHGG8O9uNk64JWTHH5yqXzvSxCcoLUdA'
 
21
 
22
  # Загрузка или создание данных
23
  def load_data():
24
+ try:
25
+ if os.path.exists(DATA_FILE):
26
+ with open(DATA_FILE, 'r', encoding='utf-8') as f:
27
+ return json.load(f)
28
+ return {'products': [], 'orders': []}
29
+ except Exception as e:
30
+ logger.error(f"Ошибка при загрузке данных: {e}")
31
+ return {'products': [], 'orders': []}
32
 
33
  def save_data(data):
34
+ try:
35
+ with open(DATA_FILE, 'w', encoding='utf-8') as f:
36
+ json.dump(data, f, ensure_ascii=False, indent=4)
37
+ except Exception as e:
38
+ logger.error(f"Ошибка при сохранении данных: {e}")
39
 
40
  data = load_data()
41
 
 
160
  <button type="submit">Добавить товар</button>
161
  </form>
162
  <h2>Существующие товары</h2>
163
+ {% if products %}
164
+ {% for product in products %}
165
+ <div class="product">
166
+ {{ product.name }} - {{ product.price }} руб.<br>
167
+ {{ product.description }}<br>
168
+ <button onclick="deleteProduct({{ product.id }})">Удалить</button>
169
+ </div>
170
+ {% endfor %}
171
+ {% else %}
172
+ <p>Нет товаров.</p>
173
+ {% endif %}
174
  <h2>Заказы</h2>
175
+ {% if orders %}
176
+ {% for order in orders %}
177
+ <div class="product">
178
+ Пользователь: {{ order.user_id }}<br>
179
+ Дата: {{ order.date }}<br>
180
+ Товары: {% for item in order.items %}
181
+ {{ item.quantity }} x {{ [p.name for p in products if p.id == item.product_id][0] }}<br>
182
+ {% endfor %}
183
+ </div>
184
  {% endfor %}
185
+ {% else %}
186
+ <p>Нет заказов.</p>
187
+ {% endif %}
188
  </div>
189
  <script>
190
  document.getElementById('addProductForm').onsubmit = async (e) => {
 
204
 
205
  @app.route('/')
206
  def admin_panel():
207
+ try:
208
+ return render_template_string(admin_html, products=data['products'], orders=data['orders'])
209
+ except Exception as e:
210
+ logger.error(f"Ошибка в шаблоне: {e}")
211
+ return "Ошибка сервера. Проверь логи.", 500
212
 
213
  @app.route('/add_product', methods=['POST'])
214
  def add_product():
215
+ try:
216
+ if request.method == 'POST':
217
+ name = request.form['name']
218
+ price = float(request.form['price'])
219
+ description = request.form['description']
220
+ product_id = max((p['id'] for p in data['products']), default=0) + 1
221
+ data['products'].append({'id': product_id, 'name': name, 'price': price, 'description': description})
222
+ save_data(data)
223
+ return jsonify({'status': 'success'})
224
+ except Exception as e:
225
+ logger.error(f"Ошибка при добавлении товара: {e}")
226
+ return jsonify({'status': 'error', 'message': str(e)}), 500
227
 
228
  @app.route('/delete_product/<int:product_id>', methods=['POST'])
229
  def delete_product(product_id):
230
+ try:
231
+ data['products'] = [p for p in data['products'] if p['id'] != product_id]
232
+ save_data(data)
233
+ return jsonify({'status': 'success'})
234
+ except Exception as e:
235
+ logger.error(f"Ошибка при удалении товара: {e}")
236
+ return jsonify({'status': 'error', 'message': str(e)}), 500
237
 
238
  # Запуск бота и Flask в разных потоках
239
  def run_bot():
240
+ try:
241
+ bot.polling(none_stop=True)
242
+ except Exception as e:
243
+ logger.error(f"Ошибка в боте: {e}")
244
 
245
  def run_flask():
246
+ try:
247
+ app.run(host='0.0.0.0', port=7860)
248
+ except Exception as e:
249
+ logger.error(f"Ошибка в Flask: {e}")
250
 
251
  if __name__ == '__main__':
252
  bot_thread = threading.Thread(target=run_bot)