BoCoder | Путь в IT
474 subscribers
517 photos
7 videos
3 files
412 links
Всем привет!
Здесь про мой путь в IT и саморазвитие

Мои социальные сети и сеть каналов
@BoCoder_Perehodnik


Админ/Связь: @BoCoder_Work
Download Telegram
Итоги дня:

🔺Изучение FastAPI

🔺Вывод всех книг автора
Теперь выводится не только имя автора, но и его книги

🔺Умная фильтрация (Depends)
внедрил профессиональный поиск. Теперь API умеет фильтровать книги по названию и цене, а также поддерживает пагинацию. Это важно для производительности базы данных

🔺Каскадное удаление
Реализовал эндпоинт DELETE /authors/{id} Теперь одним нажатием кнопки можно удалить автора вместе со всеми его книгами

🔺Обработка ошибок
Теперь при запросе несуществующих данных он возвращает 404 Not Found вместо пустоты.

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥4
День - 90

Доброго времени суток!

🔺Сейчас грубо говоря финишная прямая идет

По планам вообще:
1. Доделать проект до 95 дня, исправить все ошибки. Добавлю более сильную валидацию, продвинутый поиск, глобальную обработку исключений, поработаю с JWT-аутентификацией

2. До 99 дня изучить основы Docker, пока просто базу

3. 100 День — выкладываю все на GitHub, подвожу итоги

Дальше я планирую немного переименовать свой путь, изучать
ИБ и публиковать лайфстайл.

Также думаю как раз освободится время и по активнее буду вести свой 2 канал @BoCoder_EDU

Про все конечно расскажу подробнее, но со временем




🖥Обязательные:

🔺1. Жёсткая валидация и "Защита от дурака"

Чуть углубляюсь в Pydantic, дорабатываю схемы:
🔺Валидация Авторов

🔺Валидация книг

🔺Безопасность поисковых фильтров


Цель: Доработать то, что я упустил в прошлых днях, усилить валидацию

🔺2. Практический тест

Буду пробовать «ломать» свой API
Проверю как все работает, если что-то не так, то буду чинить;)



Всем желаю продуктивного дня!!

#Day90 #Days

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤‍🔥4👍3🔥1
Итоги дня:

🔺Изучение FastAPI

🔺Жёсткая валидация и "Защита от дурака"

1. Pydantic Field
Теперь каждое поле — это не просто тип (str, int), а набор правил.
Имя автора — Минимум 2 буквы. Цена — Только положительное число
итд..

2. Strict Mode
Включил режим extra='forbid'. Теперь, если кто-то попытается "подсунуть" лишние данные в JSON, сервер выдаст ошибку, а не просто проигнорирует их.

3. DoS-защита
Ограничил пагинацию. Теперь нельзя запросить более 100 книг за раз.

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥522
День - 91

Доброго времени суток!

🔺Постепенно смещаю фокус в сторону Cybersecurity. Сейчас делаю упор на понимание внутренних процессов: как системы работают «под капотом», где ломаются и какие узлы наиболее уязвимы.
Как-то так




🖥Обязательные:

🔺1. Добавление продвинутой сортировки

Задача:
В BookFilters изменить sort_by с обычного str на
Literal["id", "title", "price"].
В crud.py реализовать динамическую сборку

Зачем это нужно:
Как я понял, это нужно для предотвращение Blind SQL Injection в параметрах ORDER BY. Если просто прокидывать строку в запрос, хакер может использовать функции задержки (типа pg_sleep()), чтобы по времени ответа сервера вычислять данные из других таблиц. Literal ограничивает выбор только разрешенными полями.

🔺2. Глобальная обработка исключений

Задача:
Написать функцию с декоратором и понять как она работает: @app.exception_handler(Exception), которая ловит любые непредвиденные ошибки.

Зачем это нужно:
Борьба с Information Exposure (утечкой информации).
По умолчанию Python при ошибке вываливает в ответ "Трейсбэк" - пути к файлам на твоем диске, версии библиотек и куски кода. Это можно использовать как карту для поиска уязвимостей.
А хендлер заменит этот "поток данных" на лаконичное: {"detail": "Internal Server Error"}.

🔺3. Кастомная обработка ошибок базы данных

Задача:
Написать отдельный хендлер для SQLAlchemyError

Зачем это нужно:
Противодействие Fingerprinting (Снятию отпечатков системы).
Это мешает определить тип СУБД

🔺4. Маскировка логов

Задача:
Настроить логирование так, чтобы полная ошибка никогда не уходила в HTTP-ответ клиенту.

Зачем это нужно:
Разработчик должен видеть детали для фикса, а внешний пользователь только статус операции.



Всем продуктивного дня и хорошего настроения!!

#Day91 #Days

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
6❤‍🔥4👍2🔥2🎉111
Итоги дня:

🔺Изучение FastAPI

🔺Добавление продвинутой сортировки

1. Тут я, конечно, потупил. Вроде пункт не самый сложный, но запутался во всем, чем можно. Было много ошибок, особенно когда расширял таблицу в БД: добавлял stock_quantity, и в какой-то момент даже пожалел, что начал, так как посыпались ошибки в синтаксисе.

В итоге всё синхронизировал, код теперь видит новые поля

2. Схемы Pydantic: Обновил BookFilters, добавил в Literal новые поля для сортировки. Теперь Swagger предлагает выбор: id, title, price, pages, stock_quantity.

3. Логика CRUD: Добавил динамическую сборку запроса, которая учитывает выбранное поле и направление (asc/desc).
Работает! ;)

🔺Глобальная обработка исключений
Добавил что-то вроде «защитного слоя», благодаря которому API всегда возвращает понятный JSON, а не падает с непонятным текстом.

1. Создал функцию setup_exception_handlers

2. Теперь при любой непредвиденной ошибке (например, деление на ноль) клиент получает статус 500 с сообщением «Внутренняя ошибка сервера», а детали пишутся только в лог для меня.

🔺Кастомная обработка ошибок базы данных
API стал умнее по отношению к пользователю))

1. Если попробовать привязать книгу к несуществующему автору (author_id), API не просто выдаст ошибку базы, а ответит:
«Связанный объект не найден».

🔺Маскировка логов
Защита конфиденциальных данных, Важный аспект

1. Создал типо кастомного фильтра SensitiveDataFilter, который работает как цензура для логов.

2. Настроил регулярные выражения, которые ищут в сообщениях ключи password, email, token и заменяют их значения на [MASKED].


Итог и мысли:

🔺На самом деле очень интересно узнавать, как всё работает «под капотом». Сейчас сфокусировался на аспектах, близких к ИБ (информационной безопасности). Решил, что не буду расширять проект, просто приведу всё к красивому, правильному виду. Не хочу добавлять новых фишек и тд, пробую только то, что мне реально интересно и пригодится в будущем.

Конечно, выложу всё на GitHub, когда причешу, может кому интересно;0

🔺Иногда проскакивают мысли, что делаю какой-то бесполезный бред, но в то же время понимаю, что реально узнаю что-то новое и начинаю разбираться в процессах.

По проекту: всё протестировал, всё работает. Ошибок было море, долго разбирался (в основном из-за невнимательности), но это вродь отличный опыт.

Двигаюсь дальше...

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
7❤‍🔥3👍3🔥11
День - 92

Дооброго времени суток!

🔺Сегодня буду работать с JWT, намечается что-то интересное




🖥Обязательные:

🔺1. Погружение в теорию JWT
"Что такое JWT и как его создать"
https://youtu.be/7iuwfKOcvkE?si=MF-SI6SFODNMGjrK


Содержание видео:
1. Что такое JWT
2. Из каких частей состоит JWT
3. Как создать JWT
4. Как генерируется подпись в JWT
5. Чем хорош JWT
6. Безопасноcть JWT
7. Советы по применению JWT
8. Что такое refresh token


Это озвучка статей:
1. https://habr.com/ru/articles/340146/
2. https://struchkov.dev/blog/ru/what-is-jwt/


🔺2. Подготовка окружения, настройка библиотек.

🔺3. Создание модели User
Это место, где будут храниться учетные данные.

🔺4. Описание модели в SQLAlchemy
Нужно, чтобы Python узнал о существовании этой таблицы.

🔺5. Работа с инструментами для создания хеша

Например: Когда юзер пришлет qwerty, эта функция превратит его в $2b$12$EixZa.... Именно это и будем сохранять.

🔺6. Схемы Pydantic
Разделяем входные и выходные данные для предотвращения утечек

🔺7. Эндпоинт регистрации
Конец — создание самого маршрута для регистрации

🔺8. JWT-Аутентификация: Выдача токенов
Реализую эндпоинт /login. Именно здесь происходит магия JWT

🔺9. Защита эндпоинтов
Ограничиваю доступ. Сделаю так, что удалять или изменять книги сможет только авторизованный пользователь с валидным токеном.


Вот такой план, вроде как ничего не забыл.
Буду изучать, познавать.
Главная цель — это конечно же понять как это все устроенно и как работает.

Итоги может будут поздно, но постараюсь не тянуть.

Всем хорошего настроение и продуктивного дня!!

#Day92 #Days

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥3🔥3👍211
Итоги дня:

🔺Изучение FastAPI

🔺Погружение в теорию JWT

Посмотрел вводное видео, чтобы понимать архитектуру.
Ролик короткий, но максимально по делу.
Очень рекомендую автора, контент у него очень крутой!!

Видео:
"Что такое JWT и как его создать"
https://youtu.be/7iuwfKOcvkE?si=MF-SI6SFODNMGjrK


🔺Подготовка окружения и модель User

1. Установил необходимые библиотеки:
passlib — будет шифровать пароли.

python-jose — будет генерировать и проверять JWT.

python-multipart — обязателен для работы OAuth2 в FastAPI (чтобы принимать логин/пароль из форм).


2. Создание таблицы в БД:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
hashed_password TEXT NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

Создал таблицу users c полем hashed_password.
Хранить пароли в открытом виде нельзя;)

🔺SQLAlchemy и Pydantic:

1. SQLAlchemy: Описал модель User, чтобы ORM знала, как общаться с таблицей в Postgres.

2. Pydantic: Создал схемы для валидации. Теперь на входе API проверяет: корректен ли email, не пустой ли username и достаточно ли надежен пароль.

🔺Эндпоинт регистрации

Собрал всё в кучу: БД + Схемы + Хэширование.
Логику вынес в отдельный роутер app/routers/auth.py.

Сначала посыпались ошибки: конфликт версий bcrypt и права доступа к последовательностям в Postgres (InsufficientPrivilegeError).
Но всё пофиксил: 200 OK, пользователь в базе, пароль зашифрован

🔺Security Layer
Вынес логику безопасности в security.py
Реализовал проверку пароля и генерацию токенов. Тут же победил «баг» с ограничением bcrypt в 72 байта и подружил старый passlib с новым Python 3.12.

🔺Авторизация и выдача JWT

1. Написал create_access_token - «генератор пропусков».

2. Запустил эндпоинт POST /auth/login.
На выходе получил валидный токен.
Проверил через jwt.io — внутри всё хорошо: мой email и время жизни токена (exp).
Работает;)

🔺Последний штрих: (Защищенный маршрут /me)
Провека, как API будет узнавать пользователя по токену.

1. Добавил логику декодирования токена.

2. Создал эндпоинт, который отдает данные текущего юзера.

Залогинился, проверил, работает
Без токена система внутрь не пускает.

ИТОГ:

🔺Интересная тема, узнал для себя что-то новое, а главное, что полезное. Это пригодится еще в ИБ

🔺Скринов много не влезет, так что если интересно что-то конкретное по коду - пишите в комментарии, скину.

🔺План на ближайшее время: причесать код, зиучить основы Docker и залить всё на GitHub.
До 100-го дня успею


Был бы рад получить какой-то фидбек в комментариях.
Может быть я не до конца рассказываю что-то или чего-то не хватает? Что можно было бы добавить в итоги дня и тд
Буду рад, если дадите обратную связь, спасибо!!


➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥833👍11
День - 93

Доброго времени суток!

🔺По тихоньку буду перебираться к изучению основ Docker

Сегодня буду все причесывать в проекте для красоты и начинать погружение




🖥Обязательные:

🔺1. Проверка
Просмотрю все файлы, уберю лишнюю информацию и мусор. Немного подкорректирую, что нужно и все будет четенько

🔺2. Проверка Безопасности
На всякий случай проверю все файлы, на то, не прописал ли я случайно секретных паролей и тд

Также пройдусь по основным моментам по безопасности в коде для проверки, может найду что;)

🔺3. Подготовка к работе с Docker
Docker — это популярная открытая платформа для контейнеризации, позволяющая упаковать приложение со всем его окружением (библиотеками, зависимостями, настройками) в изолированный контейнер.
Думаю, что начну с вводных видео, но не подобрал еще каких именно.
Их довольно много, вечером в итогах поделюсь теми, которые оказались действительно хороши

Подготовлю все, настрою все необходимое

Еще создам первый Dockerfile


А так моя цель:
Освоить основы и иметь понимание как и что работает.

Вот в проекте я считай все попробовал, потрогал, потыкал, поэкспериментировал и понял основную работу API "под капотом"

Все это мне пригодится в ИБ, Docker тоже очень полезный инструмент, так что вродь как все не зря;)



Вот как-то так пока получается. Даже по раньше заканчиваю работу с API, чем планировал

А вам желаю хорошего дня и прекрасного настроения!

#Day93 #Days

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44❤‍🔥32👍11
Итоги дня:

🔺Изучение FastAPI

Заканчиваю свой путь в FastAPI.
Провел небольшой рефакторинг: удалил неиспользуемые импорты и лишние print(), которые засоряли логи.
Теперь всё чисто.

🔺Погружение в Docker 👩‍💻

1. Начал с теории на YouTube.
Понял, что полноценные плейлисты смотреть пока рано, подумал, что пока нужен быстрый старт для пет-проекта.
Конечно со временем буду погружаться в изучение Docker.

В итоге не нашел ничего полезного (наверное плохо искал) и просто общался с Gemini, задавал ей вопросы, разбирали основы, архитектуру и конкретные шаги внедрения.

2.Как только освоил базу, внедрил в проект всё необходимое:
.dockerignore, docker-compose.yml, Dockerfile и requirements.txt.

3. Написал свой первый Dockerfile и docker-compose.yml для связи API с PostgreSQL.
Теперь проект - это изолированная система, которую можно запустить одной командой на любом сервере.

4. При тестировании столкнулся с жесткими таймаутами при скачивании образов. После небольшого затупа, смены DNS и настройки зеркал загрузка наконец-то пошла.

5. Безопасность:
Вынес все чувствительные данные (пароли, ключи) в .env, а сам файл скрыл через .gitignore

6. Победил ошибку Port already in use:
Выяснил, что локальный Postgres конфликтовал с контейнером на порту 5432. Решил через:
sudo systemctl stop postgresql.

7. Поймал классический баг
Приложение запускалось быстрее, чем база успевала настроиться. Разобрался, пофиксил.

ИТОГ:

🔺Проект вроде как полностью упакован в Docker, завтра буду все проверять еще разок, еще поищу видео по Docker для базы и мб уже все выложу на GitHub

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤‍🔥3👍3🔥1
День - 94

Доброго времени суток!!

🔺Не буду обещать, но думаю, что уже сегодня выложу проект на GitHub
Постараюсь сделать все красиво;)




🖥Обязательные:

🔺1. Финальный тест
Проверка всего, создание таблиц, эндпоинтов и всего всего, чтоб можно было все потестить

🔺2. Реализация заполнения базы
Хочу попробовать написать скрипт, который при первом запуске добавит в базу пару авторов и книг, чтобы не было так пусто
Вот думаю, это хорошая идея или не очень

🔺3. Подготовка проекта к GitHub
Чтобы вы могли запустить мой проект, нужно будет подготовить необходимые файлы: .env.example и README md



Вам желаю продуктивного дня!!

#Day94 #Days

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤‍🔥54🎉2
Итоги дня:

🔺Изучение FastAPI
Вот и подошло к концу моё изучение фреймворка FastAPI. Это был очень интересный и познавательный путь: я узнал много нового, освоил основы и понял принципы работы современного API.

🔺Проект готов!
Он был создан в учебных целях, и в нём реализованы основные фичи, которые я освоил. Данный проект можно использовать как пример, он не претендует на роль API полноценного книжного магазина, но если его немного доработать, то вполне потянет! ;)

Мой GitHub:
https://github.com/BoCoder17

Сам проект:
https://github.com/BoCoder17/Book-Store-API

Старался написать подробный README
(мой первый раз, так что не судите строго, если что-то не так)

Фишка проекта: если база данных пуста, она автоматически заполняется начальными данными при первом запуске, чтобы вы могли сразу приступить к тестированию.
Заценивайте, кому интересно!

Буду ждать
вашей честной оценки
🙌

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥2🎉21
День - 95

Доброго времени суток!!

🔺Закончил написание проекта и теперь потихоньку перебираюсь в сферу информационной безопасности.
Вообще, хотел начать с 100-го дня, чтобы было красиво ;) Но впереди ещё целых 5 дней, а это довольно много — нужно чем-то заняться. Пока думаю...

Но на сегодня планы уже построены: я перехожу на новый дистрибутив — Fedora KDE Plasma




🖥Обязательные:

🔺1. Подготовка и установка
Скачиваю образ и устанавливаю систему.

Помню, что меня просили расписать процесс установки нового дистрибутива — сделаю это в итогах дня.

🔺2. Настройка
Ну и, конечно, полная настройка. Буду устанавливать всё с нуля, чтобы собрать удобное и красивое рабочее окружение под свои задачи.

Вот так вот



Вам желаю удачи и хорошего настроения!

#Day95 #Days

➡️ BoCoder | 💬 Chat
Please open Telegram to view this post
VIEW IN TELEGRAM
44🫡2❤‍🔥1🔥1