«Где чёртов паспорт?»: Как я победил домашний хаос с Django и QR.
Привет, дорогой читатель! Признавайся: у тебя тоже есть та самая «коробка с важным», где лежит всё — от гарантии на холодильник до первой детской соски? И каждый раз, когда нужно найти что-то конкретное, ты устраиваешь археологические раскопки, кляня себя за отсутствие системы?
Со мной так и было. Пока в прошлую субботу, разгребая завалы перед приездом тестя, я не осознал: я — инженер, создаю сложные системы, но не могу организовать собственную квартиру. Это вызов. И я принял его. За один вечер, пару литров кофе и с помощью старого доброго Django я построил HomeInventory — систему учёта всего, что у меня есть, с QR-кодами и мобильным поиском.
Добро пожаловать под капот этого микропроекта. Это история не о масштабировании на миллионы, а о том, как, имея правильные инструменты, можно решить бытовую проблему с инженерной элегантностью.
🚀 Боль, которая родила идею: «Оно где-то здесь...»
Ситуация знакома любому, кто переезжал, ремонтировал или просто живёт. Три вечных вопроса:
- В какой из десяти одинаковых коричневых коробок после переезда лежит зарядка от PlayStation?
- Кому я одолжил паяльник полгода назад?
- Истекла ли уже гарантия на стиральную машину?
Ручные списки в Google Sheets не работают — они не привязаны физически к предметам. Специальные приложения — overkill, да и сканировать что-то надо. Мне же хотелось: подошел к коробке → навел камеру → мгновенно получил всё, что нужно знать. И чтобы всё под моим контролем, без подписок. Звучит как задача для красивого пет-проекта, верно?
🤖 Часть 1: Выбор оружия — Почему Django? (И почему не что-то ещё)
В 2025 году выбор фреймворков огромен. FastAPI для API, Flask для микросервисов, куча JS-фреймворков. Но мой критерий был прост: «батарейки в комплекте» и «работать должно уже вчера».
Мой стек оказался предсказуемо классическим и невероятно эффективным:
- Django 4.2 LTS: Мой старый друг. Здесь мне нужна была не скорость написания API (с этим FastAPI справился бы лучше), а мгновенная готовность админ-панели. Django Admin — это готовый, безопасный CRUD-интерфейс для управления данными, который создается буквально десятью строками кода. ORM для работы с базой, встроенная аутентификация, миграции — всё из коробки. Зачем строить велосипед, если тебе дали сразу Tesla?
- SQLite: Для MVP и личного использования — идеально. Один файл db.sqlite3 в проекте, ноль настроек. Когда (и если) проект вырастет, миграция на PostgreSQL — дело пары изменений в settings.py.
- Bootstrap 5: Мне нужен был хотя бы минимальный приличный фронтенд для страницы сканирования и просмотра. Bootstrap даёт это за пять минут, с мобильной адаптацией «из коробки». Не хайпово, зачем практично.
- HTML5 QR Code Scanner (html5-qrcode): Ключевая библиотека. Она позволяет использовать камеру телефона прямо в браузере, без установки нативных приложений. Магия WebRTC в чистом виде. Пользователь заходит на сайт, дает разрешение на камеру — и вот он, сканер.
Философия выбора: Не усложнять. Взять проверенные, максимально готовые инструменты, чтобы сосредоточиться на логике, а не настройке.
Часть 2: Разбираем фичи «под капотом»
А теперь самое интересное — как это всё склеивается в работающую систему. Я не буду грузить тебя всем кодом весь репозиторий — в конце статьи, но ключевые моменты покажу.
Фича 1: QR-код, который рождается сам
Самая элегантная часть. Мне нужно, чтобы при добавлении новой вещи (скажем, «Документы на машину») в базу автоматически генерировался и сохранялся QR-код, ведущий на страницу этой вещи.
Как это работает в models.py:
🔮Что тут магического? Ты создаешь объект в админке, жмешь «Сохранить». Django сначала записывает его в базу (появляется id), затем срабатывает метод save(), который вызывает generate_qr(). Тот, используя библиотеку qrcode, создает PNG-изображение, кладет его в буфер и сохраняет в поле qr_code. В папке media/qrcodes/ появляется файл item_15.png. Всё. Теперь его можно распечатать на стикере.
🌌 Фича 2: Админка, от которой не хочется плакать Стандартная админка Django функциональна, но выглядит так, будто её дизайнер застрял в 2010-м. Для внутреннего удовольствия я взял Django Unfold — современную тему для админ-панели. Установка: pip install django-unfold. Добавление в INSTALLED_APPS. И вуаля:
🌌 Фича 3: Сканируем с телефона без приложений Вот где происходит магия для конечного пользователя (меня или моей жены). Я создал отдельное представление (view) и шаблон c простой страницей. Суть scanner.html:
Как это работает «под капотом»: Библиотека html5-qrcode через API MediaDevices браузера получает доступ к камере. Она захватывает видеопоток и в реальном времени анализирует каждый кадр, ища QR-код. Как только находит — декодирует его в URL и перенаправляет тебя прямо на страницу с описанием вещи. Никаких лишних действий. Разве это не чудо? Современный браузер — это мощнейшая среда выполнения, и грех этим не пользоваться.
🎯 Фича 4: API за 5 минут для будущих интеграций Вдруг я захочу сделать Telegram-бота, который по фото QR-кода будет выдавать информацию? Или мобильное приложение на React Native? Для этого нужен API. Вместо громоздкого Django REST Framework я выбрал лёгкий и быстрый Django Ninja. Почему Ninja? Синтаксис как у FastAPI (который она и использует внутри), валидация через Pydantic, автодокументация (Swagger/OpenAPI).
Всё. Теперь по адресу /api/docs у меня красивая интерактивная документация, где можно протестировать все эндпоинты. На создание полноценного API ушло 15 минут.
Часть 3: Из игрушки в реальный инструмент — кейсы
Проект перестал быть игрушкой, когда я начал его использовать.
- Кейс «Переезд»: Я распечатал QR-коды на листах А4 формата «стикер», нарезал и наклеил на каждую коробку. Грузчики выгружали коробки в новую квартиру, я ходил с телефоном, сканировал и сразу говорил: «эту — на кухню, эту — в кабинет, эту — в кладовку». Распаковка стала квестом, а не кошмаром.
- Кейс «Семейный архив»: Бабушкины фотоальбомы, детские рисунки. На коробке QR-код. Отсканировал — вижу описание: «Альбом №3. 1985-1990 гг. Лето на даче, выпускной мамы». Теперь любой родственник может найти нужное, не перерывая всё.
- Кейс «Гаражная мастерская»: Инструменты, краски, запчасти. QR-код на ящике или полке. Быстро находишь нужную отвёртку или смотришь, сколько осталось моторного масла. История использований (кто брал, когда) — в планах.
🧰 Выводы, которые я вынес и которые могут быть тебе полезны.
- MVP — это просто. Не нужно сразу делать сложную систему с уведомлениями и машинным обучением. CRUD (Create, Read, Update, Delete) — уже мощный инструмент. Сначала заставь это работать для одного сценария.
- Инструменты имеют значение. Правильно выбрав Django с его «батарейками», я сэкономил кучу времени на написании базовых вещей. Unfold и Ninja сделали опыт разработки приятнее.
- Физический мир любит цифру. QR-код — это мост между ними. Это дешёвый, надёжный и универсальный якорь для информации.
- Личные проекты — лучший полигон. Здесь можно попробовать новые библиотеки, отточить навыки и решить свою реальную проблему. Это мотивирует больше любого учебного задания.
Мой код не претендует на архитектурную гениальность, но он работает и уже приносит пользу. И это главное.
Если тебе интересно покопаться в коде, улучшить его или просто посмотреть — вот он, весь в открытом доступе .
🧩Там же в README есть инструкция по запуску.
И ты уже в деле.
🙌 А ты как борешься с хаосом, цифровым или физическим? Используешь подобные пет-проекты для решения бытовых задач? Делись в комментариях — очень интересно услышать твои лайфхаки и идеи! Если материал был полезен, буду рад подписки лайку — это лучший сигнал, что стоит делать такие разборы дальше. Удачи в твоих проектах!