Легкий путь в Python
5.1K subscribers
97 photos
18 videos
3 files
155 links
Я — Алексей Яковенко, опытный разработчик Python. Здесь вы найдете статьи, заметки, посты и видео для прокачки навыков программирования 🐍 Интересное найдет и новичок, и профи 💡

📬По вопросам: https://t.me/yakvenalexx
🗣Сообщество: https://vk.cc/cxKNTb
Download Telegram
Друзья, приветствую!

В ходе написания статьи материала получилось настолько много, что решил разбить ее на 2 части.

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

- Интеграция SQLAlchemy в проект: создание моделей таблиц, написание методов и миграция с помощью Alembic.
- Разработка API методов: создание и настройка эндпоинтов.
- Создание телеграм-бота: реализация без использования Aiogram 3, только с FastAPI и HTTPX.
- Интеграция APScheduler: настройка задач по расписанию в проекте.

В результате я подробно описал все аспекты, которые были реализованы в проекте бекенда: GitHub - VueBotFastApi.

Будете ждать статью?
1🔥62👍197
Друзья, доброе утро! ☀️

С радостью сообщаю, что моя новая статья о создании бэкенда для телеграм-бота с использованием MiniApp для записи к докторам уже опубликована! 🎉

Темы, которые я раскрыл в статье:

- Интеграция SQLAlchemy: создание моделей таблиц, написание методов и миграция с помощью Alembic.
- Разработка API методов: создание и настройка эндпоинтов.
- Создание телеграм-бота: реализация без использования Aiogram 3, только с FastAPI и HTTPX.
- Интеграция APScheduler: настройка задач по расписанию в проекте.

В результате вы сможете подробно ознакомиться со всеми аспектами реализации бэкенда. Проект занял много времени, и я буду очень благодарен за вашу обратную связь и поддержку, особенно на Хабре. Ваш лайк и комментарий помогут продвинуть публикацию! ❤️

📖 Читайте статью по ссылке: FastAPI и Vue.js 3: телеграм-бот с MiniApp для записи и автоматических уведомлений. Пишем бэкенд.

В результате я подробно описал все аспекты, которые были реализованы в логике бекенда: GitHub - VueBotFastApi.

🔗 Исходник фронтенда: GitHub

🤖 Бот: @Vue3_FastApiBOT

Заранее спасибо за вашу поддержку и обратную связь! 🙌
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍36🔥24❤‍🔥43🙏1
Надежно поднимаем PostgreSQL 1 командой 🚀

Хотите быстро и надежно поднять PostgreSQL в Docker? Вот команда, которая сделает всё за вас:

docker run --name container_postgres \
-e POSTGRES_DB=my_db \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=super_password \
-p 5432:5432 \
-v $(pwd)/postgres_data:/var/lib/postgresql/data \
-d postgres

Разбор команды:

- Имя контейнера: --name container_postgres. Удобно для управления контейнером.

- Данные для подключения: задаём имя базы (my_db), пользователя (admin) и пароль (super_password).

- Порт: -p 5432:5432. Сопоставляем порт на хосте и контейнере.

- Сохранение данных: -v $(pwd)/postgres_data:/var/lib/postgresql/data. Пробрасываем локальную папку, чтобы данные базы не пропали при перезапуске контейнера.

После запуска база данных будет доступна по порту 5432, а данные сохранятся в папке postgres_data. Просто и надёжно!
👍25🔥96
Ещё решил поделиться универсальным скриптом bash. Основная суть скрипта в том, чтоб:

1. Создать виртуальное окружение под Python если оно не существует
2. Активировать виртуальное окружение
3. Установить зависимости с файла requirements.txt
4. Запустить проект

Полезно будет для быстрого разворачивания проекта или для запуска в комплексе с systemd.

Вот полный код скрипта:

#!/bin/bash

# Название виртуального окружения
VENV_NAME="venv"

# Проверяем, существует ли уже виртуальное окружение
if [ ! -d "$VENV_NAME" ]; then
echo "Создаем виртуальное окружение..."
python3 -m venv $VENV_NAME
else
echo "Виртуальное окружение уже существует. Пропускаем создание."
fi

# Активируем виртуальное окружение
echo "Активируем виртуальное окружение..."
source $VENV_NAME/bin/activate

# Устанавливаем зависимости
echo "Устанавливаем зависимости из requirements.txt..."
if [ -f "requirements.txt" ]; then
pip install -r requirements.txt
else
echo "Файл requirements.txt не найден! Пожалуйста, проверьте наличие файла."
deactivate
exit 1
fi

# Команда для запуска скрипта
echo "Запускаем скрипт..."
python3 main.py

# Деактивация виртуального окружения (опционально, если нужно после выполнения)
echo "Завершаем работу..."
deactivate


Сохранить код нужно в файл с расширением .sh и положить его в корень проекта (рядом с файлом requirements.txt)

Пару важных уточнений.

1. Убедитесь что у вас на сервере установлен Python и Python venv
2. Для того чтоб появилась возможность сделать файл исполняемым, нужно выполнить команду:

chmod +x имя_файла.sh


Эта команда добавляет право на выполнение файла для текущего пользователя.

3. После этого вы можете запустить скрипт, используя команду:

./имя_файла.sh


4. Если вы хотите использовать этот скрипт с systemd, убедитесь, что в файле сервиса указан полный путь к скрипту в параметре ExecStart.

5. Не забудьте заменить 'main.py' в скрипте на имя вашего основного Python файла, который нужно запустить или на команду для запуска скрипта.

Этот скрипт значительно упрощает процесс настройки и запуска Python проектов, особенно при развертывании на новых системах или при автоматизации запуска через systemd.
👍28🔥104🎉1
Трудовые будни в самом разгаре😊 Хотите подробно расскажу как прикрутить к бэкенду на FastApi вход по смс на телефон и вход по коду на email в одной из следующих публикаций?
👍131🔥2811🙏3
Друзья, приветствую!

Решил поделиться с вами ещё одним стартовым шаблоном для быстрого начала разработки, но на этот раз не из мира Python, а из мира JavaScript.

Я подготовил для вас мощный стартовый шаблон для разработки современных веб-приложений с использованием:

🚀 Vue 3
⚡️ Vite
🔷 TypeScript
🛣 Vue Router
🎨 Tailwind CSS
🛠 VueUse

Этот шаблон предоставляет оптимизированную структуру и передовые настройки для быстрого старта высокопроизводительных приложений.

Особенности шаблона:

- Composition API и <script setup lang="ts"> синтаксис
- Молниеносная сборка с Vite
- Надежная типизация с TypeScript
- Эффективная навигация с Vue Router
- Гибкая стилизация с Tailwind CSS
- Более 200 полезных утилит с VueUse

Шаблон доступен на GitHub: [ссылка на репозиторий]

В проекте реализовал подробный README, так что вопросов по запуску быть не должно. Там, буквально, достаточно будет ввести 4 команды в терминале и проект будет запущен.

Не забудьте поставить звездочку проекту, если он вам понравился! Ваша поддержка мотивирует меня создавать больше полезных инструментов для разработчиков.

Буду рад вашим отзывам и предложениям по улучшению шаблона. Давайте вместе сделаем разработку на Vue ещё удобнее и эффективнее! 💪
🔥25❤‍🔥7👍74
📢Внимание. Важный анонс!📢

Запустил второй телеграм-канал, который будет посвящен JavaScript-технологиям.

В новом канале вы найдете материалы по современным JavaScript-технологиям: Vue 3, Nuxt, Tailwind и другим фреймворкам JS🚀.

Анонсы больших гайдов и публикаций, как и описание технологий, где фронтенд и бэкенд будут перекликаться, планирую дублировать в оба канала.

Посты из нового канала и относительно небольшие гайды, опубликованные на моем сайте по теме JavaScript, тут анонсировать и дублировать не буду, чтобы не забивать эфир.

Так что приглашаю всех заинтересованных в теме современных фронтенд-технологий😉
🔥1412🎉7👎2👏1
Легкий путь в Python pinned «📢Внимание. Важный анонс!📢 Запустил второй телеграм-канал, который будет посвящен JavaScript-технологиям. В новом канале вы найдете материалы по современным JavaScript-технологиям: Vue 3, Nuxt, Tailwind и другим фреймворкам JS🚀. Анонсы больших гайдов и публикаций…»
Друзья, я решил рассказать о способе, который позволит вам создавать мощные современные веб-приложения, объединяя Vue.js 3 и FastAPI. Суть в том, что на этапе разработки мы будем писать 2 независимых приложения: фронтенд на Vue.js 3 (JavaScript-фреймворк) и бэкенд на FastAPI (Python-фреймворк).

В статье я показываю, как построить полноценное веб-приложение, где Vue.js будет отвечать за пользовательский интерфейс, а FastAPI возьмет на себя серверную логику. На примере простого секундомера мы пройдем весь путь от настройки окружения до связывания компонентов в единое приложение.

Вы узнаете:

- как правильно настроить сборку проекта
- как организовать структуру файлов
- как эффективно связать фронтенд с бэкендом

Статья доступна по ссылке: https://yakvenalex.ru/ru/all_technology/zapuskaem-vue-js-3-c-fastapi-v-odnom-prilozhenii
👍22🔥145👏3
Ребята, есть тут фронтендеры, которым нужна работа? Желательно поближе к Краснодару. Если что, стучитесь в личку за подробностями: @yakvenalexx
🔥32
🚀 Лайфхак для SQLAlchemy 2: Автоматическое создание таблиц при запуске приложения

Привет, разработчики! Сегодня я хочу поделиться с вами полезным приемом для работы с SQLAlchemy 2, который сэкономит вам время и упростит процесс разработки.

Этот метод позволяет автоматически создавать отсутствующие таблицы в базе данных при запуске вашего приложения, будь то бот, FastAPI или парсер. SQLAlchemy будет сравнивать модели таблиц с реальными таблицами в базе и создавать те, которых не хватает.

Вот как это работает:

1. Настройте базовые параметры SQLAlchemy:
DATABASE_URL = get_db_url()
engine = create_async_engine(DATABASE_URL, echo=False)
async_session_maker = async_sessionmaker(engine, expire_on_commit=False)

class Base(AsyncAttrs, DeclarativeBase):
abstract = True


2. Опишите ваши модели:
class User(Base):
tablename = "user"
user_id: Mapped[int] = mapped_column(BIGINT, primary_key=True)
user_name: Mapped[str] = mapped_column(String(100))
username: Mapped[Optional[str]] = mapped_column(String(50))


3. Создайте функцию для генерации таблиц:
async def create_tables():
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)


4. В файле приложения импортируйте все модели и вызовите функцию:
from dao.models import User
from dao.database import create_tables

await create_tables()


Этот подход особенно полезен, когда вы не хотите использовать сложные инструменты для миграций, такие как Alembic. Он прост в реализации и отлично подходит для небольших проектов или быстрого прототипирования.

Попробуйте этот метод в своем следующем проекте и дайте знать, как он вам помог! 👨‍💻👩‍💻
👍23🔥162
🎉 Управление жизненным циклом бота на Pyrogram

Друзья, привет! 👋 Набросал небольшую, но полезную заметку о том, как грамотно управлять жизненным циклом User-бота через библиотеку Pyrogram. Вы узнаете, как настроить запуск, завершение и добавление хендлеров для вашего бота.

🔗 Читать статью: Управление жизненным циклом User-бота на Pyrogram

Буду рад вашим отзывам и вопросам! 🚀
🔥25👍128
В планах есть статья, в которой я снова расскажу про авторизацию и аутентификацию с использованием FastAPI. В этом материале, помимо входа через смс и почту, я планирую описать работу с JWT токенами через Bearer, а не через куки.

Если вам интересно почитать уже сейчас про авторизацию и аутентификацию с JWT через куки, рекомендую заглянуть в мою статью на Хабре: Создание собственного API на Python (FastAPI): Авторизация, Аутентификация и роли пользователей.

P.S. На скрине внешний вид Swagger-документации в котором уже используется данный подход.
3🔥46👍178
Друзья, я тут обзавёлся одной интересной штукой, так что, в ближайшее время, ждите контент в новом формате 😉
🔥69🎉146👍6👎1
Вторая часть проекта, посвященная разработке FullStack приложения для выдуманной клиники "Здоровье Плюс" уже оформлено в черновик.

Если успею за сегодня все вычитать, то завтра публикация.

В статье подробно описал процесс создания фронтенда для Telegram MiniApp, написанного на чистом Vue.JS 3.

Будете ждать выхода?
2🔥74👍18🎉71
Друзья, привет!

Рад поделиться с вами второй частью из мини-серии статей по созданию телеграм-бота с Mini App для вымышленной клиники «Здоровье плюс».

Новая статья уже опубликована на Хабре и получила название:
«FastAPI и Vue.js 3: телеграм-бот с Mini App для записи и автоматических уведомлений. Пишем фронтенд».

На этот раз я сосредоточился исключительно на разработке фронтенда — без кода на Python.

В статье детально разобрал процесс создания полноценного Single Page Application с использованием современного фреймворка Vue.js 3
. Для стилизации проекта применял Tailwind CSS.

Я постарался сделать материал доступным даже для тех, кто только начинает знакомство с фронтендом или Vue.js 3. Вы найдете пошаговые инструкции, которые помогут создать Mini App для нашего бота.

🔗 Cсылки👇
7👍26🔥1510
Друзья, привет всем! 👋

У меня появилась идея для новой статьи, в которой я хочу разобрать Aiogram Dialog и заодно рассмотреть FastStream в связке с RabbitMQ - это современная альтернатива Celery для работы с очередями сообщений.

Планирую создать бота для ресторана с функцией бронирования столиков. FastStream будет использоваться для настройки системы уведомлений. Однако функциональность бота может измениться.

Если вам интересна эта тема, напишите в комментариях, какие функции вы хотели бы видеть в боте, построенном на Aiogram Dialog 👇 Ваши идеи помогут сделать статью более полезной и интересной!
2🔥71👍2610
🚀 Полезный трюк для SQLAlchemy: как быстро преобразовать модель в словарь без использования Pydantic

Друзья, добрый день! 👋

Сегодня хочу поделиться с вами простой наработкой для работы с SQLAlchemy. Если вам часто нужно получать питоновский словарь из результатов запросов, но тянуть Pydantic для этого не хочется, то этот метод как раз для вас! 😎

📌 Решение:

Мы добавляем метод to_dict в базовый класс, от которого будут наследоваться все модели. Этот метод будет преобразовывать модель SQLAlchemy в стандартный Python-словарь, исключая необходимость в Pydantic. Очень удобно, если вы хотите работать с данными без лишних зависимостей.

🛠 Пример реализации:

class Base(AsyncAttrs, DeclarativeBase):
__abstract__ = True

def to_dict(self, exclude_none: bool = False):
"""
Преобразует объект модели в словарь.

Args:
exclude_none (bool): Исключать ли None значения из результата

Returns:
dict: Словарь с данными объекта
"""
result = {}
for column in inspect(self.__class__).columns:
value = getattr(self, column.key)

# Преобразование специальных типов данных
if isinstance(value, datetime):
value = value.isoformat()
elif isinstance(value, Decimal):
value = float(value)
elif isinstance(value, uuid.UUID):
value = str(value)

# Добавляем значение в результат
if not exclude_none or value is not None:
result[column.key] = value

return result


📦 Пример использования:

Теперь вы можете легко использовать этот метод для преобразования данных, полученных из базы:
product_data = await ProductDAO.find_one_or_none_by_id(session=session, data_id=product_id)
product = product_data.to_dict()

Это решение подходит для быстрого и удобного получения данных в формате словаря без лишних зависимостей. Очень полезно для работы с API или при отправке данных в frontend! 💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍169🙏1
🔥 Друзья, всем привет!

Наконец-то записал и опубликовал первое большое видео на Rutube и YouTube! 🎥

В нём я подробно разобрал шаблон FastAPI с JWT-аутентификацией, который интегрирован с асинхронной SQLAlchemy.

📌 Почему решил сделать обзор?

На днях я выкатил крупное обновление шаблона, и теперь он стал ещё удобнее и мощнее. Вот ключевые изменения:

- 🔄 Полностью переработал класс `BaseDao`.
Теперь сессия передаётся через конструктор, а не проваливается в каждый метод. Это делает работу с базой данных чище и проще.
- 🛠 Обновил зависимости проекта.
Сделал их более читабельными. Больше никакого сложного класса для генерации сессий — всё максимально понятно.

🎯 В видео я не просто показываю код, но и объясняю, как всё работает.

Там есть:

- 💡 Большой блок о принципах зависимостей в FastAPI.
- 🔐 Подробный разбор защищённой куки-сессии.

Видео получилось объёмным, но очень информативным, так что буду рад вашей обратной связи! 🙏

Смотреть на YouTube: https://www.youtube.com/watch?v=ZSqhCyotcnw

📂 Исходник проекта:

https://github.com/Yakvenalex/FastApiWithAuthSample

Ссылка на видео на Rutube:

https://rutube.ru/video/4b7c69c55c3eaddee7800355c82e55df/

Делитесь впечатлениями и вопросами в комментариях — обсудим! 😉
30👍49🔥2910🎉3🥴1