← Назад к вопросам

Какие фреймворки не нравятся?

1.2 Junior🔥 141 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Фреймворки которые мне не нравятся (и почему)

После 10+ лет разработки я имею чёткое мнение про различные фреймворки. Вот мой honest feedback.

Django (большое НО)

Почему не нравится

# Django имеет очень большую кривую обучения
# Слишком много "magic" под капотом

from django.db import models
from django.views import View

class User(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    created_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.name

class UserListView(View):
    def get(self, request):
        users = User.objects.all()
        return render(request, 'users.html', {'users': users})

# Проблемы:
# 1. Models связаны с views связаны с forms (слишком тесная связь)
# 2. ORM скрывает SQL (when it gets slow, you're lost)
# 3. Миграции иногда конфликтуют между собой
# 4. Settings.py имеет 100+ параметров (много defaults которые никто не понимает)
# 5. Django admin "волшебный" но это ад когда нужно кастомизировать

Плюсы Django

- Батарея включена (auth, admin, migrations)
- Для CRUD приложений очень быстро
- Большое сообщество и много packages
- Документация хорошая
- security by default (CSRF protection, SQL injection prevention)

Когда использовать Django

✅ Хорошо для:
- Стартап который нужен за неделю
- Админ панель для управления данными
- Traditional CRUD приложений
- Когда нужна готовая архитектура

❌ Плохо для:
- Микросервисов (слишком монолитный)
- Real-time приложений (Django не async-first)
- API которые нужны fast и lean
- Когда нужен полный контроль над кодом

Flask (слишком минималистичный)

Почему раньше не нравился

# Flask слишком простой, нужно всё делать вручную

from flask import Flask

app = Flask(__name__)

@app.route('/users/<int:user_id>')
def get_user(user_id):
    user = db.query(User).filter(User.id == user_id).first()
    if not user:
        return {'error': 'Not found'}, 404
    return {'id': user.id, 'name': user.name}

# Проблемы:
# 1. Нет встроенного ORM (нужно использовать SQLAlchemy)
# 2. Нет встроенной валидации (нужно Marshmallow/Pydantic)
# 3. Нет встроенной аутентификации (нужно Flask-Login)
# 4. На каждый проект нужно писать boilerplate для init
# 5. Сложно масштабировать на большой проект

Сейчас мое мнение изменилось

После появления Flask-RESTX и улучшений Flask в 2.0+
Flask стал гораздо лучше

Плюсы:
- Очень простой для начинающих
- Полный контроль над архитектурой
- Легко интегрировать custom solutions
- Много расширений (Flask-SQLAlchemy, Flask-Login и т.д.)
- Документация супер понятная

Минусы:
- Нужно написать много boilerplate
- Нужны расширения для features Django'а

Bottle (слишком простой)

from bottle import route, run

@route('/hello')
def hello():
    return 'Hello World!'

run(host='localhost', port=8080)

# Проблемы:
# 1. Слишком маленький фреймворк (даже меньше Flask)
# 2. Слишком мало документации
# 3. Мало packages экосистемы
# 4. Нет встроенной поддержки features
# 5. На production используется редко

# Когда использовать:
# - Простые скрипты или microservices
# - Обучение (понять как работают веб фреймворки)
# - Не подходит для production приложений

Tornado (старый)

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('Hello, World!')

# Проблемы:
# 1. Очень старый синтаксис (как 2010 год)
# 2. Был async first в 2010 году (когда async был нужен)
# 3. Теперь есть FastAPI, Starlette, ASGI (намного лучше)
# 4. Документация плохая
# 5. Сообщество маленькое

# Сейчас:
# - Не рекомендую для new projects
# - Только если есть legacy code

Pyramid (забыл что существует)

from pyramid.config import Configurator

def hello_world(request):
    return {'message': 'Hello World!'}

if __name__ == '__main__':
    config = Configurator()
    config.add_route('hello', '/')
    config.add_view(hello_world, route_name='hello')
    app = config.make_wsgi_app()

# Проблемы:
# 1. Никто не использует (community очень маленькое)
# 2. Документация запущена (последнее обновление 2019?)
# 3. Попытка быть между Django и Flask (не очень получилось)
# 4. Configuration through code (когда нужен flexibility)

# Вывод:
# - Забыл что он существует
# - На production редко используется
# - Для нового проекта не стану использовать

Фреймворки которые мне НРАВЯТСЯ

FastAPI (рекомендую!)

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    id: int
    name: str
    email: str

@app.get('/users/{user_id}', response_model=User)
async def get_user(user_id: int):
    user = await db.get_user(user_id)
    if not user:
        raise HTTPException(status_code=404)
    return user

# Плюсы:
# 1. Async first (встроенный asyncio support)
# 2. Автоматическая валидация (Pydantic)
# 3. Автоматическая документация (Swagger UI, ReDoc)
# 4. Type hints (mypy compatible)
# 5. Очень быстрый (один из самых быстрых Python фреймворков)
# 6. Модерн и активно развивается
# 7. Хорошая экосистема packages

# Когда использовать:
# ✅ Микросервисы
# ✅ REST API (особенно с complex validation)
# ✅ Async приложения
# ✅ Когда нужна production ready система за 2 недели

Starlette (для async HTTP)

from starlette.applications import Starlette
from starlette.responses import JSONResponse

app = Starlette()

@app.route('/users/{user_id}', methods=['GET'])
async def get_user(request):
    user_id = request.path_params['user_id']
    return JSONResponse({'id': user_id})

# Плюсы:
# 1. Очень lean (основа FastAPI)
# 2. ASGI-native
# 3. Хорошее middleware support
# 4. Async from the ground up
# 5. Контроль над каждой частью

# Когда использовать:
# - Когда нужна более full control чем FastAPI
# - Когда нужно писать сложные middleware
# - Когда хочешь понять как работает HTTP с async

SQLAlchemy (не фреймворк, но critical)

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.orm import declarative_base, sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

engine = create_engine('postgresql://localhost/db')
Base.metadata.create_all(engine)

# Плюсы:
# 1. Очень гибкий (можно использовать с любым фреймворком)
# 2. Поддержка множества databases
# 3. Lazy loading, eager loading, selective loading
# 4. Raw SQL когда нужно
# 5. Встроенная поддержка transactions

# Это не фреймворк, это инструмент для работы с БД
# Рекомендую использовать вместо Django ORM

Почему я не люблю некоторые фреймворки

Основная причина: слишком много "magic"

Django:
```python

from django.db import models

class User(models.Model): name = models.CharField(max_length=100)

def __str__(self):
    return self.name

Вопросы которые возникают у new разработчиков:

  • Почему нужен str?
  • Как это связано с views?
  • Почему migrations sometimes conflict?
  • Где на самом деле обрабатывается request?
  • Почему это медленно на production?
  • Как вообще это работает?

FastAPI (clear и explicit):

from fastapi import FastAPI from sqlalchemy import Column, String, Integer from sqlalchemy.orm import declarative_base

Base = declarative_base()

class User(Base): tablename = 'users' id = Column(Integer, primary_key=True) name = Column(String)

app = FastAPI()

@app.get('/users/{user_id}')

async def get_user(user_id: int): user = await db.query(User).filter(User.id == user_id).first() return user

Здесь всё explicit и понятно:

  • Модель БД отделена от API
  • Handler явно указан
  • Type hints и валидация явные
  • Нет hidden connections

### Таблица сравнения фреймворков

ФреймворкСкоростьПростотаAsyncЭкосистемаРекомендую?
DjangoСредняяСредняяНетОгромнаяДля стартапов
FlaskСредняяВысокаяНетБольшаяЕсли know что делаешь
FastAPIВысокаяСредняяДаРастущаяДА! (лучший выбор)
StarletteВысокаяНизкаяДаСредняяДля advanced
TornadoВысокаяНизкаяДаМаленькаяНет (устарел)
BottleСредняяВысокаяНетМаленькаяТолько для обучения
PyramidСредняяСредняяНетМаленькаяНет

### Мой личный выбор для разных сценариев

Нужен стартап за неделю? -> Django + Django REST Framework -> Быстро, есть всё включено

Нужен production API? -> FastAPI + SQLAlchemy -> Async, fast, типизирован, modern

Нужна микросервисная архитектура? -> FastAPI + Docker + Kubernetes -> Lean, fast, легко масштабировать

Нужна админ панель для управления данными? -> Django + Django Admin -> Нет аналогов

Нужен small service с few endpoints? -> FastAPI -> или Starlette если нужен полный контроль

Нужен GraphQL API? -> Strawberry + FastAPI -> или Graphene + Django

Нужен Realtime WebSocket API? -> FastAPI + WebSocket -> или Starlette + WebSocket


### Заключение

Я не люблю фреймворки которые:
- ❌ Слишком много magic (Django ORM)
- ❌ Слишком много boilerplate (Pyramid)
- ❌ Слишком старые (Tornado, Bottle)
- ❌ Слишком маленькая community (всё вышеперечисленное кроме Django)
- ❌ Плохая документация
- ❌ Нет async support (в 2024 году это critical)

Я люблю:
- ✅ Explicit и transparent (FastAPI)
- ✅ Async first (FastAPI, Starlette)
- ✅ Type hints и validation (FastAPI)
- ✅ Хорошая документация
- ✅ Активное development
- ✅ Большое сообщество или нишевое но качественное
- ✅ Выбор что использовать (не forced decisions)

Лучший выбор на 2024 год для Python backend: **FastAPI + SQLAlchemy + asyncpg**