Top.Mail.Ru

Создание интернет-магазина на Flask: от идеи до запуска

Создание интернет-магазина на Flask: от идеи до запуска

Введение: почему Flask?

Когда речь заходит о создании интернет-магазина, на ум сразу приходят тяжеловесные платформы вроде WordPress + WooCommerce или 1C-Битрикс. Они мощные, но часто избыточные. Для стартапа, нишевого проекта или для разработчика, который хочет понять все процессы изнутри, идеальным выбором может стать Flask.

Flask — это микрофреймворк для Python. «Микро» не означает слабый. Это означает, что он предоставляет только базовые компоненты (маршрутизацию, шаблоны, сессии), а все остальное вы добавляете по мере необходимости. Это дает невероятную гибкость и контроль.

В этой статье мы разберем ключевые этапы создания интернет-магазина на Flask и его основные компоненты.


Планирование и структура проекта

Перед написанием кода определитесь с базовой функциональностью:

  • Каталог товаров с категориями

  • Корзина покупок

  • Оформление заказа

  • Личный кабинет пользователя

  • Панель администратора (управление товарами, заказами)

Структура вашего проекта может выглядеть так:

/my_shop
    /app
        /templates      # HTML-шаблоны
        /static         # CSS, JS, изображения
            /css
            /js
            /uploads    # Картинки товаров
        /models.py      # Модели базы данных (Товар, Пользователь, Заказ)
        /routes.py      # Маршруты (страницы сайта)
        /forms.py       # Формы для входа, регистрации, заказа
        __init__.py     # Инициализация приложения
    config.py           # Конфигурация (ключи, настройки БД)
    run.py              # Точка входа для запуска

 

База данных и модели (SQLAlchemy)

Сердце любого магазина — данные. Используем Flask-SQLAlchemy для работы с базой данных (например, SQLite для начала, потом PostgreSQL для продакшена).

Пример моделей в models.py:

from app import db

class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    price = db.Column(db.Float, nullable=False)
    description = db.Column(db.Text)
    image = db.Column(db.String(200))
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))

class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), unique=True, nullable=False)
    products = db.relationship('Product', backref='category', lazy=True)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(100), unique=True, nullable=False)
    password_hash = db.Column(db.String(200), nullable=False)

class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    total = db.Column(db.Float, nullable=False)
    status = db.Column(db.String(20), default='Новый')
    items = db.relationship('OrderItem', backref='order', lazy=True)

class OrderItem(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    order_id = db.Column(db.Integer, db.ForeignKey('order.id'))
    product_id = db.Column(db.Integer, db.ForeignKey('product.id'))
    quantity = db.Column(db.Integer, nullable=False)

 

 Маршруты и логика (Flask routes)

В routes.py описываем, что происходит на каждой странице.

Пример главной страницы и каталога:

from flask import render_template
from app.models import Product, Category

@app.route('/')
def index():
    products = Product.query.limit(8).all()  # 8 товаров на главную
    return render_template('index.html', products=products)

@app.route('/catalog/<int:category_id>')
def catalog(category_id):
    category = Category.query.get_or_404(category_id)
    products = Product.query.filter_by(category_id=category_id).all()
    return render_template('catalog.html', category=category, products=products)

 

Корзина покупок

Корзину можно хранить в сессии Flask (для неавторизованных пользователей) или в базе данных (для зарегистрированных). Это простой словарь в сессии, где ключ — ID товара, а значение — количество.

Добавление в корзину:

from flask import session

@app.route('/add_to_cart/<int:product_id>')
def add_to_cart(product_id):
    cart = session.get('cart', {})
    cart[str(product_id)] = cart.get(str(product_id), 0) + 1
    session['cart'] = cart
    return {'message': 'Товар добавлен!'}, 200

 

Оформление заказа и оплата

После заполнения формы заказа (адрес, контакты) данные сохраняются в таблицы Order и OrderItem.

Для приема платежей вам понадобятся внешние API:

  • ЮKassa (бывшая Яндекс.Касса) — популярное решение для РФ.

  • Stripe — для международных платежей.

  • RobokassaPayPal и другие.

Интеграция выглядит так:

  1. Создаете заказ в своей БД со статусом "ожидает оплаты".

  2. Перенаправляете пользователя на страницу платежного шлюза.

  3. Платежный шлюз возвращает пользователя на ваш сайт (на специальный webhook или callback-URL).

  4. Вы проверяете статус платежа и меняете статус заказа на "оплачен".

Панель администратора (Flask-Admin)

Быстро создать админ-панель для управления товарами и заказами поможет расширение Flask-Admin.

from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView

admin = Admin(app, name='Магазин', template_mode='bootstrap3')
admin.add_view(ModelView(Product, db.session))
admin.add_view(ModelView(Category, db.session))
admin.add_view(ModelView(Order, db.session))

Автор:

9

Читайте также

0 комментариев

Оставьте комментарий

Комментарии

×
Подпишитесь на наш Telegram-канал, чтобы быть в курсе всех новостей и акций!
Подписаться