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 = """
Интернет Каталог
Каталог товаров
{% for item in catalog_data %}
-
{{ item['name'] }}
{{ item['description'] }}
Цена: ${{ item['price'] }}
{% if item['image_url'] %}
{% endif %}
{% endfor %}
Добавить товар
"""
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 = """
Добавить товар
Добавить новый товар
Вернуться к каталогу
"""
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)