This media is not supported in your browser
VIEW IN TELEGRAM
Наконец-то проект завершён! 🎉
Представляю вам 2048Bot — MiniApp и Telegram-бот для классической игры 2048 прямо в вашем мессенджере! Бот не только позволяет сыграть в увлекательную головоломку, но и сохраняет ваш лучший результат, чтобы вы могли соревноваться с другими игроками. Среди основных функций:
- Сохранение рекордов
- Просмотр списка лучших достижений
- Удобное локальное хранилище прогресса
На днях я также опубликую статью на Хабре, где поделюсь процессом разработки и основными решениями, применёнными в этом проекте. Ждите её во вторник, а может и раньше 😉
Исходный код проекта: GitHub
Поклацать бота: @fast_api_2048BOT
Представляю вам 2048Bot — MiniApp и Telegram-бот для классической игры 2048 прямо в вашем мессенджере! Бот не только позволяет сыграть в увлекательную головоломку, но и сохраняет ваш лучший результат, чтобы вы могли соревноваться с другими игроками. Среди основных функций:
- Сохранение рекордов
- Просмотр списка лучших достижений
- Удобное локальное хранилище прогресса
На днях я также опубликую статью на Хабре, где поделюсь процессом разработки и основными решениями, применёнными в этом проекте. Ждите её во вторник, а может и раньше 😉
Исходный код проекта: GitHub
Поклацать бота: @fast_api_2048BOT
🔥27👍13❤🔥6👏1🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
📢 Доброе утро, друзья!
На Хабре уже доступна моя новая статья: "Игра 2048 в вашем Telegram-боте: как создать MiniApp с помощью FastAPI и Aiogram". В ней я постарался максимально подробно разобрать, как внедрить легендарную головоломку 2048 в Telegram-бот.
Что я использовал для разработки:
- FastAPI — для реализации API методов и обработки вебхуков,
- Aiogram — для создания Telegram-бота и управления его сообщениями,
- SQLAlchemy + Alembic — для работы с базой данных и миграций,
- SQLite — для хранения рекордов игроков.
Функции бота:
🎮 Играйте в 2048: получите доступ к классической игре прямо в Telegram.
🏆 Рекорды: сохраняйте личные достижения и сравнивайте с другими игроками.
📋 Локальное хранилище: текущие данные сохраняются локально, чтобы можно было быстро продолжить игру.
🔄 Просмотр и очистка рекордов: можете увидеть свои лучшие результаты или обновить их, если решите начать с чистого листа.
Бот уже полностью рабочий — можно попробовать свои силы и побить рекорды! Все ссылки здесь:
👾 Попробовать 2048Bot
📝 Статья на Хабре
💻 Исходный код на GitHub
Надеюсь на вашу поддержку — буду рад комментариям и лайкам!
На Хабре уже доступна моя новая статья: "Игра 2048 в вашем Telegram-боте: как создать MiniApp с помощью FastAPI и Aiogram". В ней я постарался максимально подробно разобрать, как внедрить легендарную головоломку 2048 в Telegram-бот.
Что я использовал для разработки:
- FastAPI — для реализации API методов и обработки вебхуков,
- Aiogram — для создания Telegram-бота и управления его сообщениями,
- SQLAlchemy + Alembic — для работы с базой данных и миграций,
- SQLite — для хранения рекордов игроков.
Функции бота:
🎮 Играйте в 2048: получите доступ к классической игре прямо в Telegram.
🏆 Рекорды: сохраняйте личные достижения и сравнивайте с другими игроками.
📋 Локальное хранилище: текущие данные сохраняются локально, чтобы можно было быстро продолжить игру.
🔄 Просмотр и очистка рекордов: можете увидеть свои лучшие результаты или обновить их, если решите начать с чистого листа.
Бот уже полностью рабочий — можно попробовать свои силы и побить рекорды! Все ссылки здесь:
👾 Попробовать 2048Bot
📝 Статья на Хабре
💻 Исходный код на GitHub
Надеюсь на вашу поддержку — буду рад комментариям и лайкам!
🔥28👍11❤🔥4❤2👏1
Легкий путь в Python
Планирую подготовить для вас новую заготовку для разработки FastApi или телеграмм ботов, как прошлую. Какую "балванку" вы бы хотели получить?
Я не забыл. Сегодня презентация😉
👍10🔥4🥰2
Здесь можно найти:
• Общение с единомышленниками
• Мемы и обсуждения на тему IT
• Новости и интересные фичи из мира программирования
• Уютное комьюнити
Если интересуетесь программированием, стоит заглянуть и поддержать!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3🔥3
Привет! Рад сообщить, что проект над шаблоном для FastAPI завершен и теперь доступен для всех! 🔗
Это готовая основа для разработки веб-приложений с поддержкой аутентификации, авторизации и удобным логированием. Проект включает асинхронное взаимодействие с базой данных через SQLAlchemy, систему миграций с Alembic, а также bcrypt и python-jose для безопасной работы с паролями и токенами. Этот шаблон помогает быстро и эффективно настроить все ключевые элементы архитектуры, оставляя вам больше времени для реализации основной бизнес-логики.
Что внутри:
- Аутентификация и авторизация на основе JWT
- Асинхронная работа с базой данных (SQLAlchemy + aiosqlite)
- Система миграций для управления схемой БД
- Структурированный код с модульной архитектурой, что упрощает поддержку и масштабирование
- Гибкое логирование через loguru
Кроме того, внутри подробный README с инструкциями по установке, настройке и запуску проекта. Весь код доступен по ссылке ниже, так что приглашаю к тестированию!
👉 Ссылка на проект
Буду признателен за поддержку в виде звезд на GitHub ⭐️ — это помогает улучшать и развивать проект и в виде обратной связи в комментариях ниже👇
Это готовая основа для разработки веб-приложений с поддержкой аутентификации, авторизации и удобным логированием. Проект включает асинхронное взаимодействие с базой данных через SQLAlchemy, систему миграций с Alembic, а также bcrypt и python-jose для безопасной работы с паролями и токенами. Этот шаблон помогает быстро и эффективно настроить все ключевые элементы архитектуры, оставляя вам больше времени для реализации основной бизнес-логики.
Что внутри:
- Аутентификация и авторизация на основе JWT
- Асинхронная работа с базой данных (SQLAlchemy + aiosqlite)
- Система миграций для управления схемой БД
- Структурированный код с модульной архитектурой, что упрощает поддержку и масштабирование
- Гибкое логирование через loguru
Кроме того, внутри подробный README с инструкциями по установке, настройке и запуску проекта. Весь код доступен по ссылке ниже, так что приглашаю к тестированию!
👉 Ссылка на проект
Буду признателен за поддержку в виде звезд на GitHub ⭐️ — это помогает улучшать и развивать проект и в виде обратной связи в комментариях ниже👇
GitHub
GitHub - Yakvenalex/FastApiWithAuthSample: Этот проект представляет собой готовый шаблон для разработки масштабируемых веб-приложений…
Этот проект представляет собой готовый шаблон для разработки масштабируемых веб-приложений на основе **FastAPI** с полноценной системой аутентификации и авторизации. - Yakvenalex/FastApiWithAuthSample
🔥34❤23❤🔥6👍5🎉2
from contextlib import asynccontextmanager
from typing import Callable, Optional
from fastapi import Depends
from loguru import logger
from sqlalchemy.ext.asyncio import async_sessionmaker, AsyncSession
from typing_extensions import AsyncGenerator
from sqlalchemy import text
from functools import wraps
from app.dao.database import async_session_maker
class DatabaseSessionManager:
"""
Менеджер для работы с сессиями базы данных. Позволяет управлять сессиями,
транзакциями и предоставляет зависимости FastAPI для удобного внедрения сессий.
"""
def __init__(self, session_maker: async_sessionmaker[AsyncSession]):
self.async_session_maker = session_maker
@asynccontextmanager
async def get_session(self) -> AsyncGenerator[AsyncSession, None]:
"""
Создает новую сессию базы данных.
В этом методе создается асинхронная сессия базы данных.
В случае ошибки логирует ее и повторно поднимает исключение,
а также гарантирует закрытие сессии при завершении работы.
Выходной тип: Асинхронный генератор сессии `AsyncSession`.
"""
try:
async with self.async_session_maker() as session:
yield session
except Exception as e:
logger.error(f"Не удалось создать сессию базы данных: {str(e)}")
raise
finally:
await session.close()
@asynccontextmanager
async def managed_transaction(self, session: AsyncSession) -> AsyncGenerator[None, None]:
"""
Управляет транзакцией, осуществляя коммит или откат при ошибке.
Этот метод принимает существующую сессию и выполняет коммит по завершении транзакции.
Если возникает исключение, происходит откат транзакции и логирование ошибки.
Параметр:
- `session`: Текущая асинхронная сессия базы данных `AsyncSession`.
Выходной тип: Асинхронный генератор.
"""
try:
yield
await session.commit()
except Exception as e:
await session.rollback()
logger.exception(f"Транзакция не удалась: {str(e)}")
raise
async def get_db(self) -> AsyncGenerator[AsyncSession, None]:
"""
Зависимость для FastAPI, предоставляющая сессию без управления транзакцией.
Асинхронный генератор для использования с FastAPI в качестве зависимости,
который предоставляет сессию для выполнения запросов к базе данных.
Выходной тип: Асинхронный генератор сессии `AsyncSession`.
"""
async with self.get_session() as session:
yield session
async def get_db_with_transaction(self) -> AsyncGenerator[AsyncSession, None]:
"""
Зависимость для FastAPI, предоставляющая сессию с управлением транзакцией.
Асинхронный генератор для использования с FastAPI в качестве зависимости,
который предоставляет сессию, автоматически выполняя коммит по завершении транзакции
или откат в случае ошибки.
Выходной тип: Асинхронный генератор сессии `AsyncSession`.
"""
async with self.get_session() as session:
async with self.managed_transaction(session):
yield session
def connection(self, isolation_level: Optional[str] = None, commit: bool = True):
"""
Декоратор для управления сессией и дополнительными настройками транзакции.
Позволяет добавлять сессию в метод с возможностью указания уровня изоляции транзакции.
Если `commit=True`, выполняется коммит в конце метода, иначе коммит не выполняется.
Параметры:
- `isolation_level` (опционально): Уровень изоляции для транзакции (например, "SERIALIZABLE").
- `commit` (по умолчанию True): Определяет, будет ли выполняться коммит после метода.
Возвращает:
- Декорированный асинхронный метод с дополнительными параметрами управления транзакцией.
"""
❤5🔥4👍2
def decorator(method):
@wraps(method)
async def wrapper(*args, **kwargs):
async with self.async_session_maker() as session:
try:
# Устанавливаем уровень изоляции, если он указан
if isolation_level:
await session.execute(text(f"SET TRANSACTION ISOLATION LEVEL {isolation_level}"))
# Выполняем декорируемый метод
result = await method(*args, session=session, **kwargs)
# Выполняем коммит, если параметр commit=True
if commit:
await session.commit()
return result
except Exception as e:
await session.rollback() # Откатываем транзакцию при ошибке
raise e # Поднимаем исключение дальше
finally:
await session.close() # Закрываем сессию
return wrapper
return decorator
@property
def session_dependency(self) -> Callable:
"""
Зависимость FastAPI для внедрения сессии без управления транзакцией.
Возвращает:
- Зависимость для FastAPI, которая предоставляет асинхронную сессию `AsyncSession`.
"""
return Depends(self.get_db)
@property
def transaction_session_dependency(self) -> Callable:
"""
Зависимость FastAPI для внедрения сессии с управлением транзакцией.
Возвращает:
- Зависимость для FastAPI, которая предоставляет асинхронную сессию `AsyncSession`
с автоматическим управлением транзакцией (коммит или откат).
"""
return Depends(self.get_db_with_transaction)
# Создание экземпляра DatabaseSessionManager
session_manager = DatabaseSessionManager(async_session_maker)
# не делает коммит
SessionDep = session_manager.session_dependency
# делает коммит
TransactionSessionDep = session_manager.transaction_session_dependency
# Пример использования декоратора
# @db_manager.connection(isolation_level="SERIALIZABLE", commit=True)
# async def example_method(*args, session: AsyncSession, **kwargs):
# # Основная логика метода
# pass
Штуку одну готовлю универсальную. Решил что неудобно будет прыгать между получением сессии под FastApi и под обычные функции / хендлеры телеграмм ботов. Сегодня протестирую ее. Если коротко, то будет один пакет dao, который будет закрывать вообще все случаи жизни для использования SQLAlchemy)
🔥17❤3👍3
Друзья! Сегодня вышло глобальное обновление шаблона FastAPI + SQLAlchemy с полной поддержкой авторизации и аутентификации.
Кратко о главных изменениях:
- Реорганизована структура DAO, добавлен универсальный DatabaseSessionManager для управления сессиями.
- Поддержка транзакций и зависимостей FastAPI для гибкости в работе с базой данных.
- Упрощена конфигурация проекта и доступ к переменным окружения.
Полное описание всех изменений доступно в релизе.
Кратко о главных изменениях:
- Реорганизована структура DAO, добавлен универсальный DatabaseSessionManager для управления сессиями.
- Поддержка транзакций и зависимостей FastAPI для гибкости в работе с базой данных.
- Упрощена конфигурация проекта и доступ к переменным окружения.
Полное описание всех изменений доступно в релизе.
GitHub
Release Крупное обновление: Универсальное управление сессиями и реорганизация DAO · Yakvenalex/FastApiWithAuthSample
Релиз: Оптимизация и переработка системы сессий
Описание:
В данном релизе реализованы значительные улучшения в структуре и работе с сессиями для базы данных. Основные изменения связаны с переносом ...
Описание:
В данном релизе реализованы значительные улучшения в структуре и работе с сессиями для базы данных. Основные изменения связаны с переносом ...
❤🔥19🔥7👍5❤4
Добрый вечер🙋.
Для всех кто ждал - у меня хорошие новости. Статья выйдет в воскресенье (3-го ноября). Нужно вычитать на свежую голову😊
🔗 Ссылка на код проекта: GitHub
Для всех кто ждал - у меня хорошие новости. Статья выйдет в воскресенье (3-го ноября). Нужно вычитать на свежую голову😊
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20❤7🔥5❤🔥2🥰2
Друзья, доброе утро! ☀️ Обещанная третья статья в цикле публикаций про асинхронную SQLAlchemy 2 уже вышла на Хабре, и её можно почитать прямо сейчас. Новая статья называется "Асинхронный SQLAlchemy 2: оптимизация кода, практики обновления и удаления данных".
В этой статье я:
✅ Оптимизирую базовый класс (BaseDao) и декоратор для сессий — делаю их более гибкими и эффективными.
✅ Объясняю обновление данных — от одиночных до массовых изменений записей в таблицах.
✅ Освещаю удаление данных — методы для работы с отдельными записями и группами данных.
Ссылка на статью и исходный код, использованный в примерах, закреплены под постом. 👇
Приятного чтения и продуктивного дня! 😊
🔗 Ссылка на статью: "Асинхронный SQLAlchemy 2: оптимизация кода, практики обновления и удаления данных"
🧑💻Ссылка на код проекта: GitHub
UPD: Ссылка на статью теперь корректная
В этой статье я:
✅ Оптимизирую базовый класс (BaseDao) и декоратор для сессий — делаю их более гибкими и эффективными.
✅ Объясняю обновление данных — от одиночных до массовых изменений записей в таблицах.
✅ Освещаю удаление данных — методы для работы с отдельными записями и группами данных.
Ссылка на статью и исходный код, использованный в примерах, закреплены под постом. 👇
Приятного чтения и продуктивного дня! 😊
🧑💻Ссылка на код проекта: GitHub
UPD: Ссылка на статью теперь корректная
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥14❤🔥8
Интересует ли вас изучение Flet (Flutter на Python), технологии, которая позволяет создавать кроссплатформенный фронтенд без использования JavaScript?
Anonymous Poll
72%
Да, очень интересно, хочу подробности!
7%
Знаком с Flet, но хочу узнать больше
21%
Нет, неинтересно
❤🔥8🔥3👍2❤1
Легкий путь в Python
Интересует ли вас изучение Flet (Flutter на Python), технологии, которая позволяет создавать кроссплатформенный фронтенд без использования JavaScript?
Я подумал, что просто обучение будет сильно скучно и решил это дело трансформировать в новый проект. Суть следующая.
На FastApi напишем простой API с регистрацией, авторизацией и некоторыми спец методами для проекта.
Далее, мы напишем фронт на чистом Flet, вообще не используя HTML + CSS + JS (мечта Python-разработчика).
Затем я покажу вам как прикручивать к Flet приложениям свой API и после мы сгенерируем приложение под следующие платформы: Desktop, WEB и Android.
Думаю получится интересно. Если тема пойдет, то можно будет отдельным мини-курсом уже подробно про Flet поговорить😉
На FastApi напишем простой API с регистрацией, авторизацией и некоторыми спец методами для проекта.
Далее, мы напишем фронт на чистом Flet, вообще не используя HTML + CSS + JS (мечта Python-разработчика).
Затем я покажу вам как прикручивать к Flet приложениям свой API и после мы сгенерируем приложение под следующие платформы: Desktop, WEB и Android.
Думаю получится интересно. Если тема пойдет, то можно будет отдельным мини-курсом уже подробно про Flet поговорить😉
🔥67👍8❤5🤩5
Забавная история. Сейчас пишу API и решил у ChatGPT поинтересоваться за простую библиотеку для асинхронной отправки сообщений в Telgram-бота (это под новый проект). Ответ на скрине. Забавно то, что это моя библиотека)
Вот так она выглядит в связке с зависимостями FastApi:
Кому интересно вот ссылка на библиотеку: GitHub.
Вот так она выглядит в связке с зависимостями FastApi:
@router.post('/send_text')
async def send_text(message: Message,
notifier: Notifier = Depends(get_notifier),
user_data: User = Depends(get_current_admin_user)):
try:
await notifier.send_text(message.text, settings.CHAT_ID)
return {"status": "success", "message": "Текстовое сообщение отправлено"}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))Кому интересно вот ссылка на библиотеку: GitHub.
😁21❤9🔥6👍5👏3🤔1
Друзья, доброе утро👋
Из-за загруженности на прошлой неделе не получилось выходить в эфир. На этой неделе буду исправляться.
Новая статья будет посвящена проекту на Flet + FastApi. В рамках этого проекта мы напишем кросплатформенное приложение, которое завяжем на собственном API.
Реализуем такие методы:
- регистрация, аутентификации и авторизация
- отправка фото, файлов и текста через современный Material интерфейс (форма регистрации, авторизации, панель отправки сообщений) и сделаем мы это под разные уровни доступа.
Для тех кто не знает, Flet - это Flutter с мира Python. Библиотека для кросплатформенной разработки под Android, IOS, Desktop и WEB без использования нативных языков, таких как JavaScript, Java, Kotlin и т.д.
Мое мнение о технологии Flet оставлю в комментариях к этому посту👇
Из-за загруженности на прошлой неделе не получилось выходить в эфир. На этой неделе буду исправляться.
Новая статья будет посвящена проекту на Flet + FastApi. В рамках этого проекта мы напишем кросплатформенное приложение, которое завяжем на собственном API.
Реализуем такие методы:
- регистрация, аутентификации и авторизация
- отправка фото, файлов и текста через современный Material интерфейс (форма регистрации, авторизации, панель отправки сообщений) и сделаем мы это под разные уровни доступа.
Для тех кто не знает, Flet - это Flutter с мира Python. Библиотека для кросплатформенной разработки под Android, IOS, Desktop и WEB без использования нативных языков, таких как JavaScript, Java, Kotlin и т.д.
Мое мнение о технологии Flet оставлю в комментариях к этому посту👇
🔥21👍12❤🔥6
Друзья, добрый вечер🙋
Наконец-то у меня дошли руки завершить свой последний проект. Как и говорил, проект состоит из двух отдельных, но взаимосвязанных приложений: FastApi и Flet.
Для создания FastApi я использовал свой стартовый шаблон, о котором многие из вас уже знают, если следите за этим каналом. Для тех, кто еще не в курсе, расскажу, что я разработал и регулярно обновляю собственный стартовый шаблон для написания FastApi-приложений. В него уже встроены асинхронная SQLAlchemy, а также методы для регистрации и авторизации.
Кроме того, этот шаблон был расширен дополнительными API-методами, специально адаптированными для работы с Flet.
Что касается Flet, я выбрал его в качестве ключевого компонента пользовательского интерфейса, чтобы создать удобный и визуально привлекательный frontend для взаимодействия с серверной частью.
Подробная статья по этому проекту уже написана и будет опубликована завтра.
Ссылки на исходный код и на работающие приложения закрепил ниже👇
Наконец-то у меня дошли руки завершить свой последний проект. Как и говорил, проект состоит из двух отдельных, но взаимосвязанных приложений: FastApi и Flet.
Для создания FastApi я использовал свой стартовый шаблон, о котором многие из вас уже знают, если следите за этим каналом. Для тех, кто еще не в курсе, расскажу, что я разработал и регулярно обновляю собственный стартовый шаблон для написания FastApi-приложений. В него уже встроены асинхронная SQLAlchemy, а также методы для регистрации и авторизации.
Кроме того, этот шаблон был расширен дополнительными API-методами, специально адаптированными для работы с Flet.
Что касается Flet, я выбрал его в качестве ключевого компонента пользовательского интерфейса, чтобы создать удобный и визуально привлекательный frontend для взаимодействия с серверной частью.
Подробная статья по этому проекту уже написана и будет опубликована завтра.
Ссылки на исходный код и на работающие приложения закрепил ниже👇
👍15❤🔥10🔥7❤2
Вопросы, комментарии, предложения и сочувствия по поводу того, что пришлось написать полноценный проект на Flet😂👇
🐳6👍2🫡2
Доброе утро, друзья! ☀️ Статья опубликована!
В ней я разобрал, как с помощью Python и таких инструментов, как Flet и FastAPI, можно создавать кроссплатформенные приложения без необходимости использования других языков программирования, таких как JavaScript для веба или Swift для мобильных приложений. 🚀
Мы погрузимся в:
💎 Создание API с функциями авторизации, аутентификации и регистрации пользователей.
💎 Разработку фронтенда с формами для входа и регистрации, а также основной функциональной частью приложения.
Также я поделюсь своими мыслями о концепции Flet и ее практической жизнеспособности. 🤔
Ссылка на статью, исходный код и рабочие проекты закреплены под этим постом. Не пропустите! 📚✨
В ней я разобрал, как с помощью Python и таких инструментов, как Flet и FastAPI, можно создавать кроссплатформенные приложения без необходимости использования других языков программирования, таких как JavaScript для веба или Swift для мобильных приложений. 🚀
Мы погрузимся в:
💎 Создание API с функциями авторизации, аутентификации и регистрации пользователей.
💎 Разработку фронтенда с формами для входа и регистрации, а также основной функциональной частью приложения.
Также я поделюсь своими мыслями о концепции Flet и ее практической жизнеспособности. 🤔
Ссылка на статью, исходный код и рабочие проекты закреплены под этим постом. Не пропустите! 📚✨
🔥20❤🔥8👍6❤3👎1