Pull to refresh
9
56.2
Аббакумов Валерий @Extralait

Tech Lead Python

Send message

Спасибо, что указали на ошибку, поправлю в статье

В целом, можно было использовать и JsonField, но тогда вам каждый раз нужно собирать и разбирать весь объект

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

Я таким образом обычно храню маппинг внешних id (ID в других приложениях) с внутренним, так как они нужны не так уж часто и могут быть для совершенно разных приложений.

В задаче, которая стояла у вас, я бы все-таки использовал дополнительную таблицу, для каждой сущности. Для удобства был бы написан класс поля модели, который создавал бы дополнительную таблицу для модели владельца. В целом было бы что-то типо кастомной истории

Спасибо, что подсветили недочеты. По nullable FK действительно стоило рассмотреть пример.

А по поводу "оценить" как-то уже прижилось, везде, где работал, говорили так). Разумеется, речь шла о выполнении запроса.

Технически, при использовании asgi, в последних версиях Django у вас есть возможность использовать асинхронные варианты методов QuerySet, можете посмотреть и в этом направлении

Здравствуйте, спасибо за комментарий

Реальный кейс 1
Я работал на проекте, где все провайдеры (репозитории, интеракторы, юзкейсы, контроллеры) являются синглтонами, из-за этого у меня не было возможности во время запроса пользователя записывать какие-либо данные в экземпляр провайдера.

Я добавил дескриптор, который при присваивании записывает данные в ContextVar контекста запроса, а при запросе атрибута, возвращает их от туда же.

Реальный кейс 2

У меня на проекте есть Entity на основе Pydantic, которые я заполняю данными из django QuerySet.

Помимо этого написана логика, на то, чтобы в метод репозитория при вызове можно было передать DTO, который нужно вернуть вместо Entity.

Так как в Entity есть дополнительные вычисляемые свойства и их терять не хочется, сначала QuerySet конвертируется в Entity, а потом в DTO.

Так же в запросе может участвовать не только одна таблица базы данных, мне нужно, чтобы значения соответствующих полей с O2O, M2O и M2M связями также для начала конвертировались в соответствующих им Entity.

Для этого был написан дескриптор для вложенных Entity (NestedEntity), который использует в объемлющих Entity.

Реальный кейс 3

Описан в текущей статье в разделе про вложенные дескрипторы

Спасибо за комментарий, действительно забыл упомянуть об этом. Добавил в статью.

По поводу "Важно отметить", "Например" и "Примечание" в следующих статьях подумаю о том, как избавиться от их обилия

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

Добрый день, я даже не подозревал, что из-за этого могут блокироваться IP адреса или подсети, можете пожалуйста рассказать или поделиться ссылкой на тематические материалы о том, с чьей стороны и по каким принципам происходит блокировка? Думаю это было бы многим полезно

Я упоминал, про подключение по ключу

Рекомендую вам настроить SSH ключи вместо аутентификации по паролю. В контексте данной статьи этот пункт мы не будем рассматривать, но я оставлю вам инструкцию о том, как это сделатьВ

Выше был хороший комментарий о том, какой ключ сейчас актуально использовать

Про права, я тоже обратил внимание, что 777 не есть хорошо

что не рекомендуется) но лучше понять, что вы делаете

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

Понял, не знал. Я думал, написать и о том как настроить ту же амнезию, но что-то уже сомневаюсь, в том, что оно того стоит

Чем так плох OpenVPN для личного пользования? У меня например дома стоит ТВ на YaOS причем от tuvio я из VPN на него только его и могу поставить. А чтобы подружить ту же амнезию с роутером, мне во-первых нужен другой роутер, а во-вторых дополнительно с ним возиться. Я понимаю, что технология могла остаться в прошлом, но все мои, опять же подчеркну, личные потребности она более чем закрывает

А про амнезию, я не согласен, ее если честно, прям геморойнее было ставить и она у меня не работала корректно с клиента для iOS и Ubuntu, хотя с windows и android проблем не было. Собственно поэтому дополнительно поднял и OpenVPN

Хммм, разве это выглядит так запарно? Я потратил минут 15-20 чтобы настроить чистый сервер для примера из статьи и накидать черновик. Хотя, наверное, если делать это в первый раз, все может быть не так гладко, как я это вижу сейчас. Уже не помню, если честно, когда настраивал что-то на сервере впервые

Не уверен, что статьи с тегом "простой" и "туториал", как описано в рекомендациях "для неподготовленного читателя и широкую аудиторию" должен удовлетворять вашим требованиям в статье на 4 минуты. Я просто хотел поделиться решением, которое без лишней мароки прекрасно работает и я сам им пользуюсь более года. В целом, в этой предметной области я вряд ли являюсь хотябы среднячком, поэтому какого-то действительно образцового подхода, к моему великому сожалению, я продемонстрировать не могу. Я всегда рад любым замечаниям и предложениям по улучшению материала, был бы рад, если бы вы показали как что и где лучше сделать. Мне казалось что сообщества нужны чтобы помогать друг другу развивать компетенции, надеюсь, я не один такой. Если вы хотите почитать более квалифицированные статьи, буду рад, если вы откроете мои с пометкой "сложно" но, как я понимаю, моя предметная области не сильно соприкасается с вашей.

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

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

Вы всегда можете использовать

Источник с альтернативными вариантами установки

Или просмотреть содержание скаченного скрипта

У меня и openvpn и amnezia работает на сервере в Хельсинки, провайдер интернета Домру. Мобильный МТС и Билайн

Вам нужно порыться в разделах

  • Settings -> Editor -> General -> Auto Import

  • Settings -> Editor -> General -> Code completion

  • Settings -> Editor -> General -> Inline completion

И отключить не нужные вам чекбоксы

  1. Сортировку файлов в разделе Project можно сделать по имени, дате обновления, типу файлов. ... -> Sort By -> <Нужный тип>

  2. Большая часть этих комбинаций будет работать в windows. Если они будут отличаться, нужное действие вы сможете найти по жирным названиям, указанным в скобках в разделе Settings -> Keymap

  3. Вы можете добавить свои правила в разделе Settings -> Editor -> Inspections (документация). Добавить тип файлов можно в разделе Settings -> Editor -> File Types (документация)

Information

Rating
163-rd
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Web Developer
Lead
From 450,000 ₽
Git
Linux
SQL
Python
PostgreSQL
Docker
OOP
Django
SQLalchemy
RESTful API