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

📬По вопросам: https://t.me/yakvenalexx
🗣Сообщество: https://vk.cc/cxKNTb
Download Telegram
Легкий путь в 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
Прикольно)
😁8👍5🆒3