File size: 5,354 Bytes
39ba81d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
from flask import Flask, render_template_string, request, redirect, url_for
from huggingface_hub import login, Dataset, hf_api
import os
from dotenv import load_dotenv
from werkzeug.utils import secure_filename
import shutil

# Загрузка переменных окружения
load_dotenv()
HF_TOKEN = os.getenv("HF_TOKEN")

# Логин в Hugging Face
login(token=HF_TOKEN)

# Загрузка датасета
dataset = Dataset("Aleksmorshen/ruslankanc")

# Параметры для загрузки изображений
UPLOAD_FOLDER = 'static/uploads'
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

# Функция для проверки расширений изображений
def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

# Инициализация Flask
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route("/")
def catalog():
    # Получаем все товары из датасета
    catalog_data = dataset[:]
    
    # HTML-шаблон
    html_content = """
    <!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <title>Интернет Каталог</title>
    </head>
    <body>
        <h1>Каталог товаров</h1>
        <ul>
            {% for item in catalog_data %}
                <li>
                    <strong>{{ item['name'] }}</strong><br>
                    {{ item['description'] }}<br>
                    Цена: ${{ item['price'] }}<br>
                    {% if item['image_url'] %}
                        <img src="{{ item['image_url'] }}" alt="{{ item['name'] }}" width="100"><br>
                    {% endif %}
                </li>
            {% endfor %}
        </ul>
        <a href="{{ url_for('add_product') }}">Добавить товар</a>
    </body>
    </html>
    """
    
    return render_template_string(html_content, catalog_data=catalog_data)

@app.route("/add", methods=["GET", "POST"])
def add_product():
    if request.method == "POST":
        # Получаем данные формы
        name = request.form["name"]
        description = request.form["description"]
        price = request.form["price"]
        
        # Обработка файла изображения
        image_url = None
        if "image" in request.files:
            file = request.files["image"]
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                filepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
                file.save(filepath)
                
                # Загружаем изображение в Hugging Face и получаем ссылку
                image_url = upload_image_to_hf(filepath, filename)

        # Добавление товара в датасет
        dataset.push({
            'name': name,
            'description': description,
            'price': float(price),
            'image_url': image_url
        })

        return redirect(url_for('catalog'))
    
    # HTML-шаблон для добавления товара
    html_content = """
    <!DOCTYPE html>
    <html lang="ru">
    <head>
        <meta charset="UTF-8">
        <title>Добавить товар</title>
    </head>
    <body>
        <h1>Добавить новый товар</h1>
        <form method="POST" enctype="multipart/form-data">
            <label for="name">Название:</label><br>
            <input type="text" id="name" name="name" required><br><br>
            
            <label for="description">Описание:</label><br>
            <textarea id="description" name="description" required></textarea><br><br>
            
            <label for="price">Цена:</label><br>
            <input type="number" step="0.01" id="price" name="price" required><br><br>
            
            <label for="image">Изображение:</label><br>
            <input type="file" id="image" name="image"><br><br>
            
            <button type="submit">Добавить товар</button>
        </form>
        <br>
        <a href="{{ url_for('catalog') }}">Вернуться к каталогу</a>
    </body>
    </html>
    """
    
    return render_template_string(html_content)

def upload_image_to_hf(filepath, filename):
    """Загружает изображение в Hugging Face и возвращает ссылку на него"""
    
    # Например, можно загружать изображение в Hugging Face Hub как артефакт (вместо этого используйте URL облачного сервиса)
    image_url = f"https://huggingface.co/{HF_TOKEN}/path/to/{filename}"
    
    # Здесь можно использовать API для загрузки в Hugging Face, если это необходимо.
    # Для примера, мы возвращаем путь, как будто оно загружено.
    shutil.move(filepath, os.path.join("hf_uploads", filename))  # Имитация загрузки в систему

    return image_url

# Запуск приложения
if __name__ == "__main__":
    app.run(debug=True, port=7860)