Устраняем зависимости между объектами в 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

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

В этом уроке, который состоит из двух частей, я расскажу о том, как можно создать и обработать API используя django rest framework и vue.js. В первой части урока мы займемся бэкэндом, во второй – фронтэндом. Исходный код урока: https://github.com/apirobot/django-vue-simplenote Настройка Начнем с установки django и django rest framework (будем считать, что вы уже создали и активировали виртуальное окружение): Создадим нашу рабочую папку и папку backend, в…

Read More