Aleksmorshen commited on
Commit
39ba81d
·
verified ·
1 Parent(s): b1acead

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +142 -0
app.py ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template_string, request, redirect, url_for
2
+ from huggingface_hub import login, Dataset, hf_api
3
+ import os
4
+ from dotenv import load_dotenv
5
+ from werkzeug.utils import secure_filename
6
+ import shutil
7
+
8
+ # Загрузка переменных окружения
9
+ load_dotenv()
10
+ HF_TOKEN = os.getenv("HF_TOKEN")
11
+
12
+ # Логин в Hugging Face
13
+ login(token=HF_TOKEN)
14
+
15
+ # Загрузка датасета
16
+ dataset = Dataset("Aleksmorshen/ruslankanc")
17
+
18
+ # Параметры для загрузки изображений
19
+ UPLOAD_FOLDER = 'static/uploads'
20
+ ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
21
+ os.makedirs(UPLOAD_FOLDER, exist_ok=True)
22
+
23
+ # Функция для проверки расширений изображений
24
+ def allowed_file(filename):
25
+ return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
26
+
27
+ # Инициализация Flask
28
+ app = Flask(__name__)
29
+ app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
30
+
31
+ @app.route("/")
32
+ def catalog():
33
+ # Получаем все товары из датасета
34
+ catalog_data = dataset[:]
35
+
36
+ # HTML-шаблон
37
+ html_content = """
38
+ <!DOCTYPE html>
39
+ <html lang="ru">
40
+ <head>
41
+ <meta charset="UTF-8">
42
+ <title>Интернет Каталог</title>
43
+ </head>
44
+ <body>
45
+ <h1>Каталог товаров</h1>
46
+ <ul>
47
+ {% for item in catalog_data %}
48
+ <li>
49
+ <strong>{{ item['name'] }}</strong><br>
50
+ {{ item['description'] }}<br>
51
+ Цена: ${{ item['price'] }}<br>
52
+ {% if item['image_url'] %}
53
+ <img src="{{ item['image_url'] }}" alt="{{ item['name'] }}" width="100"><br>
54
+ {% endif %}
55
+ </li>
56
+ {% endfor %}
57
+ </ul>
58
+ <a href="{{ url_for('add_product') }}">Добавить товар</a>
59
+ </body>
60
+ </html>
61
+ """
62
+
63
+ return render_template_string(html_content, catalog_data=catalog_data)
64
+
65
+ @app.route("/add", methods=["GET", "POST"])
66
+ def add_product():
67
+ if request.method == "POST":
68
+ # Получаем данные формы
69
+ name = request.form["name"]
70
+ description = request.form["description"]
71
+ price = request.form["price"]
72
+
73
+ # Обработка файла изображения
74
+ image_url = None
75
+ if "image" in request.files:
76
+ file = request.files["image"]
77
+ if file and allowed_file(file.filename):
78
+ filename = secure_filename(file.filename)
79
+ filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
80
+ file.save(filepath)
81
+
82
+ # Загружаем изображение в Hugging Face и получаем ссылку
83
+ image_url = upload_image_to_hf(filepath, filename)
84
+
85
+ # Добавление товара в датасет
86
+ dataset.push({
87
+ 'name': name,
88
+ 'description': description,
89
+ 'price': float(price),
90
+ 'image_url': image_url
91
+ })
92
+
93
+ return redirect(url_for('catalog'))
94
+
95
+ # HTML-шаблон для добавления товара
96
+ html_content = """
97
+ <!DOCTYPE html>
98
+ <html lang="ru">
99
+ <head>
100
+ <meta charset="UTF-8">
101
+ <title>Добавить товар</title>
102
+ </head>
103
+ <body>
104
+ <h1>Добавить новый товар</h1>
105
+ <form method="POST" enctype="multipart/form-data">
106
+ <label for="name">Название:</label><br>
107
+ <input type="text" id="name" name="name" required><br><br>
108
+
109
+ <label for="description">Описание:</label><br>
110
+ <textarea id="description" name="description" required></textarea><br><br>
111
+
112
+ <label for="price">Цена:</label><br>
113
+ <input type="number" step="0.01" id="price" name="price" required><br><br>
114
+
115
+ <label for="image">Изображение:</label><br>
116
+ <input type="file" id="image" name="image"><br><br>
117
+
118
+ <button type="submit">Добавить товар</button>
119
+ </form>
120
+ <br>
121
+ <a href="{{ url_for('catalog') }}">Вернуться к каталогу</a>
122
+ </body>
123
+ </html>
124
+ """
125
+
126
+ return render_template_string(html_content)
127
+
128
+ def upload_image_to_hf(filepath, filename):
129
+ """Загружает изображение в Hugging Face и возвращает ссылку на него"""
130
+
131
+ # Например, можно загружать изображение в Hugging Face Hub как артефакт (вместо этого используйте URL облачного сервиса)
132
+ image_url = f"https://huggingface.co/{HF_TOKEN}/path/to/{filename}"
133
+
134
+ # Здесь можно использовать API для загрузки в Hugging Face, ��сли это необходимо.
135
+ # Для примера, мы возвращаем путь, как будто оно загружено.
136
+ shutil.move(filepath, os.path.join("hf_uploads", filename)) # Имитация загрузки в систему
137
+
138
+ return image_url
139
+
140
+ # Запуск приложения
141
+ if __name__ == "__main__":
142
+ app.run(debug=True, port=7860)