Где хранить бизнес логику в Django

Толстые модели (fat models), тонкие представления (thin views), тупые шаблоны (stupid templates) – один из распространенных подходов к структурированию Django приложений. Цель подхода – вынести бизнес логику из представлений и шаблонов, и поместить ее в модели. Очевидно, что представления и шаблоны не должны содержать бизнес логику, так как они имеют совсем другие обязанности. Но выносить логику в модели не лучший вариант. Это приводит к тому, что модели становятся…

Read More

SOLID: Принцип единственной обязанности

Хорошо спроектированная программа – программа, в которой: не страшно делать изменения; затраты на эти изменения – минимальны; легко тестировать Для того, чтобы писать такие программы, нужно практиковаться и знать о принципах проектирования хороших программ. Некоторые из таких принципов: DRY (Don’t repeat yourself); KISS (Keep it simple, stupid); YAGNI (You ain’t gonna need it); DDD (Domain Driven Design); Шаблоны проектирования; SOLID принципы; … Каждому, из этих…

Read More

Устраняем зависимости между объектами в Python

Хорошо спроектированная программа состоит из объектов, отвечающих принципу единственной обязанности (каждый объект делает только одну вещь, и делает это хорошо). Такие объекты постоянно “общаются” друг с другом. Для такого общения, один объект должен что-то знать о другом объекте, а это вызывает зависимость между ними. И зависимость между объектами неизбежна. Но сильная зависимость приводит к большим проблемам. Изменение одного объекта приводит к изменению другого объекта, а…

Read More

Namedtuple в Python

Функция collections.namedtuple позволяет построить класс, который содержит только поля и никаких методов. Экземпляр класса будет работать так же, как и обычный кортеж (tuple), только к элементам экземпляра класса можно будет обратиться через соответсвутющие имена, в отличие от обычного кортежа, где к элементам можно обратиться только через их индексы. В примере ниже определим кортеж для хранения информации о городе с помощью collections.namedtuple: Для создания именованного кортежа, нужно задать имя…

Read More

Расширяем модель User в Django

Для работы с пользователями, Django предоставляет готовую модель User. Часто, одной этой модели недостаточно. Приходится ее расширять, либо переписывать, если не устраивает стандартная реализация. Несколько причин, почему может не устраивать стандартная реализация: Вам нужно вместо двух полей first_name и last_name, одно поле full_name. Не устраивает то, что поле email – необязательно (blank=True). Не устраивает то, что USERNAME_FIELD = ‘username’. USERNAME_FIELD указывает на поле, которое является уникальным идентификатором для пользователя. Кроме того, это поле используется на…

Read More

Django + Elm. Аутентификация через JSON Web Token

JSON Web Token (JWT) – токен, который содержит минимально необходимую информацию для аутентификации и авторизации. В зашифрованном виде выглядит, как строка, которая состоит из трех частей: Header (заголовок). Содержит тип токена (в данном случае это JWT), и какой используется алгоритм шифрования. Payload (нагрузка). Содержит всевозможные данные (например, информацию о пользователе или время, через которое токен будет не действителен). Signature (подпись). Нужна для проверки, что токен не подделан и выдан…

Read More

Как реализовать систему лайков в Django

В статье мы реализуем функционал типичной кнопки “Мне нравится”. В этот функционал входит возможность: Добавлять лайк; Удалять свой лайк; Посмотреть общее количество лайков у объекта; Проверить, лайкнул ли пользователь объект или нет; Показать пользователей, которые лайкнули объект. Исходный код урока: https://github.com/apirobot/django-likes-app Первоначальные настройки Создаем и активируем виртуальное окружение: Устанавливаем django: Создаем проект: Объект, который мы будем лайкать в нашем тестовом проекте будет Твит. Этим объектом может быть…

Read More

Listcomps, dictcomps, setcomps в python

Списковые включения (listcomps) – одна из моих любимых фич в python. Благодаря им код становится короче, понятнее, быстрее, и ими не сложно научиться пользоваться. Если вы до сих пор не используете списковые включения, то клянусь, вы очень многое упускаете. Мне кажется, что лучший способ показать, как работают списковые включения, это привести несколько примеров. Если у вас есть список чисел, и вам нужно возвести каждое число в…

Read More

Django + Vue. Как создать и обработать API. Часть 2

В предыдущей части урока мы написали бэкэнд для нашего приложения с заметками. В этом уроке мы продолжим, и напишем фронтэнд часть, используя фреймворк vue.js для Javascript. Исходный код урока: https://github.com/apirobot/django-vue-simplenote После предыдущего урока, структура вашего приложения должна выглядить примерно так: Настройка фронтэнда и установка зависимостей Давайте начнем с создания шаблона с помощью коммандной утилиты vue-cli: Коммандная утилита создала папку simplenote. Переименуем эту папку: Устанавливаем зависимости и запускаем сборку: Если все…

Read More