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

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

Начинаю подготовку материала для новой статьи на Хабре. На этот раз я решил сделать практическую статью по разработке телеграмм-ботов на Aiogram 3. 🚀

Мы создадим бота, который станет вашим личным хранилищем файлов (улучшенная версия “Избранного” в Telegram) и простым органайзером для заметок и напоминаний. 📁📝 Постараюсь сделать всё максимально понятно, хотя материала будет достаточно много.

Если вам интересен такой формат практических статей, особенно по разработке ботов на Aiogram 3, поставьте реакцию на этот пост. Это поможет мне понять, сколько из вас ждёт выхода этой статьи🔥🔥🔥

Спасибо за вашу поддержку! 😊
🔥56👍179🤩1
Легкий путь в Python
​​Привет, друзья! 🌟 Начинаю подготовку материала для новой статьи на Хабре. На этот раз я решил сделать практическую статью по разработке телеграмм-ботов на Aiogram 3. 🚀 Мы создадим бота, который станет вашим личным хранилищем файлов (улучшенная версия “Избранного”…
Сначала я разработал логику работы с базой данных, используя чистый aiosqlite — асинхронный модуль для работы с SQLite. Затем подумал: почему бы не показать, как использовать SQLAlchemy для асинхронной работы с телеграм-ботами на Aiogram 3? Так что это будет первый пример в моей статье на Хабре о ботах, работающих с SQLAlchemy.
11🔥11👍7
Коротко о моей подготовке кода бота перед пушем на GitHub😂
🤣12😁4👍1
Привет, друзья! 👋

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

О процессе разработки

При написании бота я несколько раз менял стратегию и пришел к выводу, что лучше сосредоточиться на конкретных частях, а не пытаться охватить всё сразу. В этом боте я интегрировал асинхронные методы SQLAlchemy для работы с SQLite. В итоге, я описал две простые модели (пользователи и заметки) и установил между ними связи. Также я добавил ряд методов для работы с базой данных, стараясь не усложнять и не перегружать код.

Что реализовано

На данный момент в боте реализован блок заметок, и он полностью функционален. Главная особенность — хранение медаконтента (фото, документы, видео и прочее) на стороне Telegram. В базе данных хранятся только ID медиа, что позволяет запускать бота на любом устройстве с минимальными ресурсами. 📱💾

Функционал бота

- Добавление заметки 📝
- Удаление заметки
- Редактирование заметки (текстовое содержимое) ✏️

Поиск и отображение заметок:

- Все заметки 📋
- По типу контента 📂
- По дате добавления 📅
- Поиск по текстовому содержимому 🔍

Планы на будущее

Если будет поддержка и интерес, в планах описать и реализовать ещё один большой модуль с напоминаниями. 🔔

Ссылка на исходник бота с GitHub закреплена под этим постом. Подробную инструкцию о процессе разработки и использованных подходах постараюсь опубликовать на Хабре до понедельника, но это не точно. 😉

До скорого! 👋
🔥159👍5🆒2
Друзья, привет! Хочу поделиться с вами способом максимально быстрого и простого запуска телеграмм ботов, написанных на Python, на любом VPS сервере. Готовы? Поехали!

1. Создаем Dockerfile:


FROM python

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["/bin/bash", "-c", "python aiogram_run.py"]


2. Загружаем файлы бота вместе с Dockerfile на VPS сервер. Самый удобный способ GitHub, самый простой - FileZilla

3. Собираем образ командой:

docker build -t bot_image .


(где bot_image — это имя образа, можете выбрать любое).

4. Запускаем проект:

docker run -it -d --env-file .env --restart=unless-stopped --name bot_name bot_image


Эта команда подтягивает .env файл, собирает контейнер и запускает его в режиме постоянной работы.

Теперь ваш бот готов к работе! Надеюсь, этот гайд был полезен. Делитесь своими успехами и задавайте вопросы, если что-то непонятно! 🚀
👍22🔥42
​​Привет, друзья! 👋

Рад сообщить, что моя подробная статья о создании бота для управления заметками уже опубликована на Хабре! В ней я постарался максимально просто и доступно объяснить, как интегрировать SQLAlchemy в Telegram-ботов, написанных на Aiogram 3. 💻

Почему это важно? Для всех, кто планирует делать проекты с базами данных на aiogram 3, рекомендую использовать SQLAlchemy — это гибко, удобно и надежно.

💡 Вот, что умеет бот:

👉 Добавление заметок 📝
👉 Удаление заметок
👉 Редактирование текстов заметок ✏️

Плюс, вы можете:

👉 Просматривать все заметки 📋
👉 Фильтровать их по типу контента 📂
👉 Искать по дате добавления 📅
👉 Использовать поиск по тексту 🔍

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

Подробная статья, работающий бот и проект на GitHub — все ссылки уже закреплены под этим постом! 🚀

До встречи!
🔥17👍64👏1
📂 Управление файлами и папками в Ubuntu: основные команды 💻

Подготовил для вас несколько полезных команд для управления файлами и папками через терминал Ubuntu.

1️⃣ Создать папку
mkdir /путь/к/папке


2️⃣ Создать файл
touch /путь/к/файлу


3️⃣ Посмотреть содержимое папки
ls /путь/к/папке


4️⃣ Копировать файл
cp /путь/к/исходному_файлу /путь/к/новому_файлу


5️⃣ Переместить или переименовать файл/папку
mv /путь/к/исходному_файлу /путь/к/новому_файлу


6️⃣ Удалить файл
rm /путь/к/файлу


7️⃣ Удалить папку и её содержимое
rm -rf /путь/к/папке


8️⃣ Перейти в другую директорию
cd /путь/к/папке


9️⃣ Вернуться в домашнюю директорию
cd ~


🔟 Показать скрытые файлы
ls -a /путь/к/папке


💡 Полезный трюк:

Удалить всё содержимое папки, но оставить саму папку:
rm -rf /путь/к/папке/{*,.*}

Сохраняйте на память
👍232🔥2👏2🥱1
🚀 Как быстро пересобрать Docker-контейнер после изменения кода

Всем привет! Хочу поделиться простой и быстрой инструкцией для тех, кто внес изменения в код приложения (например, бота) и хочет оперативно пересобрать контейнер на сервере, чтобы эти изменения вступили в силу.

Для этого метода на сервере должен быть Dockerfile. Далее следуем простым шагам:

1️⃣ Пересобираем образ

Убедитесь, что имя образа осталось таким же, как и у предыдущего:
docker build -t <имя_образа>  .


2️⃣ Определяем старый контейнер

Смотрим имя или ID контейнера:
docker ps -a


3️⃣ Останавливаем контейнер

Останавливаем старый контейнер:
docker stop <имя_или_ID_контейнера>


4️⃣ Удаляем контейнер

Удаляем старый контейнер:
docker rm <имя_или_ID_контейнера>


5️⃣ Запускаем новый контейнер

Теперь можно запустить новый контейнер. Вот пример с использованием .env файла и настройкой автоматического перезапуска:
docker run -it -d --env-file .env --restart=unless-stopped --name <имя_контейнера> <имя_образа> 


Готово! Ваш контейнер обновлен и снова работает 🤖
👍124🔥2👎1
Запуск Телеграм-бота через systemd с виртуальным окружением: инструкция

Раз уже пошла тема про деплой телеграмм бота на VPS сервере поделюсь с вами ещё одним способом. На этот раз с использованием systemd.

1. Подготовка

👉 Скопировать файлы бота на сервер.
👉 Установить виртуальное окружение и все зависимости.
👉 Проверить, что бот работает при ручном запуске.

2. Скрипт для запуска бота

Создать Python-скрипт, который активирует виртуальное окружение и запускает бота. Вот пример:

import os
import subprocess

script_path = os.path.join(os.path.dirname(file), '/home/bot_dir/aiogram_run.py')

if os.path.exists(script_path):
subprocess.run(['/home/bot_dir/env/bin/python3', script_path], check=True)
else:
print("Не удалось найти скрипт aiogram_run.py.")


Сохранить, например, как run_bot.py.

3. Создание systemd сервиса

Создать файл сервиса:
sudo nano /etc/systemd/system/имя_бота.service


Пример содержимого:
[Unit]
Description=ИМЯ БОТА
After=multi-user.target

[Service]
Type=simple
ExecStart=/home/user/путь_к_боту/env/bin/python3 /home/user/путь_к_боту/run_bot.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

В целом, этот файл:

👉 Запускает бот с использованием виртуального окружения.
👉 Обеспечивает автоматический перезапуск бота в случае его падения.
👉 Гарантирует, что бот запускается при старте системы.

4. Настройка прав и запуск

chmod +x /home/user/путь_к_боту/run_bot.py
chmod +x /etc/systemd/system/имя_бота.service
sudo systemctl daemon-reload
sudo systemctl start имя_бота
sudo systemctl enable имя_бота


5. Полезные команды

Просмотр лога: sudo journalctl -u имя_бота
Лог в реальном времени: sudo journalctl -f -u имя_бота
Очистка кэша: sudo journalctl --vacuum-time=1s
Перезапуск бота: sudo systemctl restart имя_бота


Метод тоже достаточно простой. Для того чтоб изменения вступили в силу после правок кода используем: sudo systemctl restart имя_бота
👍86🔥4
А вот пример run_bot.py файла для ленивых😊👇

import os
import subprocess

script_path = os.path.join(os.path.dirname(__file__), 'aiogram_run.py')
venv_path = '/home/bot_dir/env'
requirements_path = '/home/bot_dir/requirements.txt'

# Проверяем наличие виртуального окружения
if not os.path.exists(venv_path):
print("Виртуальное окружение не найдено. Создаем...")
subprocess.run(['python3', '-m', 'venv', venv_path], check=True)
print("Виртуальное окружение создано.")

# Устанавливаем зависимости
subprocess.run([os.path.join(venv_path, 'bin', 'pip'), 'install', '-r', requirements_path], check=True)
print("Зависимости установлены.")

# Проверяем наличие скрипта
if os.path.exists(script_path):
subprocess.run([os.path.join(venv_path, 'bin', 'python3'), script_path], check=True)
else:
print("Не удалось найти скрипт aiogram_run.py.")


Этот скрипт сначала проверяет наличие виртуального окружения в указанной директории. Если оно отсутствует, то создается новое окружение и устанавливаются зависимости из файла requirements.txt. Затем проверяется наличие скрипта aiogram_run.py, и если он существует, то запускается.
🔥12👍84👏2
Привет, друзья!

Рад сообщить, что я готовлю для вас новый практический гайд, но, на этот раз, по FastApi. Мы создадим полноценный мини-чат, используя FastApi. В процессе вы познакомитесь с такими важными аспектами, как вебсокеты, а также узнаете, как применять асинхронную алхимию с SQLite (в предыдущих примерах мы использовали PostgreSQL).

Надеюсь, что вы будете ждать выхода публикации!
🔥25👍114
Создание кастомных обработчиков исключений в FastAPI

Я давно грозился рассказать вам про кастомные обработчики исключений в FastApi. Сейчас продемонстрирую это дело на ошибке когда токен авторизации истек или когда токена нет (в случае логаута).

Для начала создадим файл exceptions.py на одном уровне с main.py. В этом файле определим два класса исключений для обработки наших ситуаций.
from fastapi import status, HTTPException

class TokenExpiredException(HTTPException):
def __init__(self):
super().__init__(status_code=status.HTTP_401_UNAUTHORIZED, detail="Токен истек")

class TokenNotFoundException(HTTPException):
def __init__(self):
super().__init__(status_code=status.HTTP_401_UNAUTHORIZED, detail="Токен не найден")

Эти классы наследуют от HTTPException и задают соответствующие статус-коды и сообщения об ошибках.

Теперь добавим обработчики этих исключений в main.py. При возникновении таких ошибок, пользователь будет перенаправлен на страницу /auth.
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse
from app.exceptions import TokenExpiredException, TokenNotFoundException

app = FastAPI()

@app.exception_handler(TokenExpiredException)
async def token_expired_exception_handler(request: Request, exc: TokenExpiredException):
# Перенаправляем пользователя на страницу /auth
return RedirectResponse(url="/auth")

@app.exception_handler(TokenNotFoundException)
async def token_not_found_exception_handler(request: Request, exc: TokenNotFoundException):
# Перенаправляем пользователя на страницу /auth
return RedirectResponse(url="/auth")

Здесь мы используем декоратор @app.exception_handler для привязки наших кастомных исключений к обработчикам. В случае возникновения исключения, пользователь будет перенаправлен на страницу авторизации.

Как видите, в FastAPI все просто и элегантно! 😊

P.S. Это пример с будущей статьи.
🎉9🔥84👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Привет, друзья! Рад сообщить, что проект, который я недавно анонсировал, завершён. Также готов черновик подробной статьи по разработке. Завтра утром вас ждёт большой гайд по созданию этого проекта. Исходный код и готовый проект в облаке будут доступны в течение нескольких часов. Сейчас пока делюсь демкой
13👍6👏2🤯1
​​Добрый вечер!

После небольшого форс-мажора наконец-то дошли руки до оформления проекта на GitHub, его деплоя и написания этого поста. Рад сообщить, что проект мини-чата на FastAPI полностью завершен!

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

Сегодня пришлось написать немало JavaScript-кода, и могу сказать, что результат того стоил. Получилось функциональное приложение для мини-чата, и я уверен, что после знакомства с инструкцией (которая будет завтра) вы сможете с лёгкостью создавать чаты любой сложности.

Главное — вы поймете, как добавить динамику и реактивность на фронтенд, даже если у вас нет глубоких знаний в разработке пользовательских интерфейсов.

К посту прикреплены ссылки на работающий проект и исходный код на GitHub. Буду очень рад вашей поддержке, так как в этот проект вложено много времени и сил.

При достаточной обратной связи я готов продолжать развивать этот проект и дальше.

До встречи завтра утром на Хабре!
👍20🔥125
Такая вот ситуация...
👏19🔥65🤔1
​​Доброе утро🙋

Рад поделиться отличными новостями — мой проект мини-чата на FastAPI успешно завершен и уже доступен для использования, а обещанная подробная статья про его написание уже опубликована на моем Хабре🎉

В процессе работы я применил множество интересных решений, как знакомых, так и новых. В проекте использованы:

👉 работа со статическими файлами,
👉 интеграция SQLAlchemy в FastAPI,
👉 реализация JWT-токенов, регистрация и аутентификация,

И новый блок:

👉вебсокеты для двустороннего общения.

В статье пришлось активно поработать с JavaScript, чтобы обеспечить полную функциональность приложения. Теперь, даже если у вас нет глубоких знаний в разработке интерфейсов, вы сможете добавить динамику и реактивность в свои проекты!

Все ссылки на проект, исходный код на GitHub и сайт с приложением закреплены под этим постом. 🔗

Буду рад вашей поддержке и обратной связи!
👍145🔥4
Незапланированное включение😊

Недавно в сеть вышла новая версия ChatGPT — OpenAI 01. Эта модель способна на глубокие размышления и действительно впечатляет! Я нашел сервис, где можно попробовать эту модель бесплатно. Токенов немного, хватит на 1-2 запроса в день, так что используйте их с умом для действительно важных и сложных задач. Для более простых запросов доступны модели ChatGPT-o и ChatGPT-o-mini.

Переходите по ссылке и пробуйте: OpenAI 01
🔥12👍76😁1
Кто прочитал статью про мини-чат на FastApi. Как вам такой формат публикаций?
👍19🔥8👏3
​​👋 Друзья, всем привет!

Я подготовил для вас новый, полезный и интересный проект! 🚀

В этот раз мы займемся тем, как при помощи чистого JavaScript, HTML и CSS связать форму на веб-странице с Telegram-ботом без использования бэкенда. Да-да, вы не ослышались — никакого бэкенда! 😎

📋 Что это даст?

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

Я уже написал подробную статью на эту тему и планирую выложить её в четверг, 3-го октября. Но, если всё пойдёт по плану, возможно, опубликую раньше. 😉 Обязательно следите за обновлениями, чтобы не пропустить!

🔗 Ссылку на проект с GitHub закрепил под этим постом, переходите и смотрите!👨‍💻
🔥1710👍6❤‍🔥4👎1