All streams
Search
Write a publication
Pull to refresh
95
24
Алексей Яковенко @yakvenalex

Опытный python разработчик с многолетним стажем.

Send message

Вы третий кого я забанил за все время. В целом, Алекс на ваш счет был прав. Какой вы к черту программист с 10-ти летним стажем, если после того, как за откровенное хамство и неадекватное общение, получив бан, вы начинаете, как маленькая девочка бегать под моими постами и поддакивать таким-же)

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

Вот, испортили мне карму. Начали негатив вбрасывать в комментариях. В глове у вас что вообще?

А шаблонизатор в Django тоже бред? Вы серьезно?) Jinja2 рулит)

Привет. Спасибо за обратную связь. На Хабре куча моих публикаций по FastApi, вебхуки, докер и прочие технологии. Посмотрите в профиле)

Принял. Спасибо за обратную связь и конструктивную критику)

Ну она так умеет. Напишите в стиле "Запросы нужно отправлять на этот API". Только ссылку конкретную дайте)

Почему нельзя? APScheduler запускает отдельные функции. Если вы напишите функцию на основе того-же aiohttp, то свободно сможете заходить в базу через API-методы. Вполне себе рабочая схема)

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

  1. Инициализация планировщика только в одном воркере: Чтобы избежать дублирования задач, можно использовать проверку на наличие существующего экземпляра планировщика. Например, можно использовать переменную окружения или файл блокировки.

  2. Использование Redis или другой базы данных для хранения состояния задач: Это позволит вам управлять задачами более централизованно и избежать их дублирования.

Для более сложных проектов обычно используется Celery.

Благодарю за обратную связь. Тут да, возможно до конца не разобрался, но это не отменяет факта что он сырой и неудобен на фоне Flutter)

На платформе Amvera Cloud есть возможность работать через Git. Для отправки и обновления файлов можно использовать стандартные команды. Однако, чтобы сэкономить время, я часто загружаю все файлы напрямую через интерфейс на сайте. Это я к тому что как кому удобно)

Основная идея этой статьи заключается в том, что Flet не является готовым к использованию продуктом. Я не занимался оптимизацией, так как не планирую применять эту технологию на практике. Считаю, что фреймворк требует доработки и не может конкурировать с Flutter.

В вашем случае нужно было под одну сессию вывполнять 2 метода:

@connection
async def select_user(session):
    all_users = await UserDAO.get_all_users(session)
    user_by_id = await UserDAO.get_username_id(session)

Файл database.py

from typing import Annotated


uniq_str_an = Annotated[str, mapped_column(unique=True)]
content_an = Annotated[str | None, mapped_column(Text)]
array_or_none_an = Annotated[List[str] | None, mapped_column(ARRAY(String))]

Спасибо за обратную связь) По Алхимии есть такое решение, как SQLModel, которое закрывает проблемы с получением и работой с данными. Так что большого смысла не вижу отказываться от Алхимии. С Tortoise ORM знаком достаточно поверхностно. Поэтому, пока не могу выступать в роли эксперта тут)

Да все допилить можно при желании. Текущей версии, думаю, достаточно что разобрался каждый кто хоть немного с FastApi знаком. Проект делал чисто для статьи и в качестве демонстрации. Что касается боевого проекта тут вы, конечно, правы. Нужно усиливать

Я думаю, что если бы вы внимательно читали, то у вас бы не было вопросов) Мы такие поля как id, created_at и updatet_at, как и название таблиц, уже закрыли в базовом классе Base. Для этого мы прописали следующее:

class Base(AsyncAttrs, DeclarativeBase):
    __abstract__ = True  # Класс абстрактный, чтобы не создавать отдельную таблицу для него

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
    created_at: Mapped[datetime] = mapped_column(server_default=func.now())
    updated_at: Mapped[datetime] = mapped_column(server_default=func.now(), onupdate=func.now())

    @declared_attr.directive
    def __tablename__(cls) -> str:
        return cls.__name__.lower() + 's'

Information

Rating
306-th
Location
Краснодар, Краснодарский край, Россия
Date of birth
Registered
Activity

Specialization

Specialist
From 200,000 ₽
SQL
Python
PostgreSQL