Как стать автором
Обновить

Ещё 10 батареек для джанго

Время на прочтение5 мин
Количество просмотров27K

Продолжаем делиться своим опытом использования полезных батареек для Django.
Первая часть
Ещё рекомендуем «Сумбурные заметки про python и django» и «Django проект PR Hero: что внутри и полученный опыт».

Для Django написано огромное количество пакетов. Из них мы выбрали 10, которые использовали сами в своих последних проектах и которыми остались довольны. Все они есть на PyPI. Они продокументированы и покрыты тестами, где-то больше, где-то меньше. Исключение составляет django-sphinx, о котором отдельно.



django-hvad


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

Пример описания модели:

class DjangoModel(TranslatableModel):
    name = models.CharField(max_length=255, unique=True)
    author = models.CharField(max_length=255)

    translations = TranslatedFields(
        description = models.TextField(),
        description_author = models.CharField(max_length=255),
    )

    def __unicode__(self):
        return self.name


Пример запроса:

DjangoModel.objects.language('en').filter(description_author='Jonas Obrist')


Приложение одно из лучших в своей категории, хоть и альфа. Местами сыровато, что открыто признаёт сам автор. Оно старается минимизировать количество запросов к БД, дружественна к south-миграциям.
Кроме того, django-hvad умеет рисовать симпатичную админку для переводов полей:


Гитхаб
Документация

django-whatever (django-any)


Модуль позволяет отказаться от создания громоздких фикстур для тестов, заменив их простым созданием объектов моделей на лету, заполняя поля случайными данными. Благодаря этому тесты становятся более читабельными и поддерживаемыми.

Вот пример, в котором мы создаём два экземпляра моделей, но указываем при создании лишь те значения полей, которые важны для теста (остальное сделает django-any):

from django_any import any_model

class TestMyShop(TestCase):
    def test_order_updates_user_account(self):
        account = any_model(Account, amount=25, user__is_active=True)
        order = any_model(Order, user=account.user, amount=10)
        order.proceed()

        account = Account.objects.get(pk=account.pk)
        self.assertEquals(15, account.amount)


django-any написал хабраюзер kmmbvnr, а django-whatever это дружественный форк нашего авторства, в котором мы добавили несколько фич и поправили несколько багов.

Github
Доки

django-jenkins


Удобная интеграция Django и Jenkins для упрощения решения задач continious integration от kmmbvnr. Всё очень просто: настраиваешь и пользуешься, никаких нареканий нет.

Хорошие статьи про тестирование в Django и непосредственно про интеграцию с django-jenkins:

Гитхаб
Видео-туториал от автора: “Как начать тестировать и получать от этого удовольствие”

django-guardian


Приложение реализует недостающую из коробки фичу прав на объект, а не на всю модель (object-level permissions). Начиная с Django 1.2 бэкенд аутентификации поддерживает проверку прав на объект, но это не реализовано в самом Django. django-guardian успешно заполняет этот пробел.

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

Гитхаб
Доки

django-email-confirmation


Среди множества других аналогичных батареек, django-email-confirmation не берёт на себя всё и сразу, но то, что берёт — делает хорошо. Позволяет пользователю регистрировать на себя несколько email-адресов, из них выделить основной, подтверждать адреса по почте и управлять всем этим нехитрым процессом. Можно определить собственные шаблоны для писем, можно подружить метод отправки письма с Celery, всё как положено. Является частью проекта Pinax.

Гитхаб

django-compressor / webassets


Два самых интересных, на наш взгляд, приложения для склейки и минификации CSS/JS. В отличие от упоминавшегося в прошлом посте django-compress, не требуют конфига и могут работать с помощью темплейт-тегов, что довольно удобно для верстальщиков. webassets, что примечательно, работает не только с Django (flask-assets). Оба модуля поддерживают Jinja через свои расширения. Любители SAS, LESS, CoffeeScript не уйдут обиженными, препроцессоры тоже поддерживаются.

Мы используем django-compressor и предостерегаем вас от поспешных обновлений на свежие версии приложения на боевых серверах: модуль активно разрабатывается и периодически всплывают неожиданные регрессии (несмотря на тесты). В остальном очень хороший пакет от одного из django core devs.

django-compressor гитхаб
django-compressor доки

webassets гитхаб
webassets доки

django-taggit


Простая батарейка, как по структуре, так и по возможностям. Как ясно из названия, django-taggit реализовывает поддержку тегов. Делает он это на уровне модели с помощью специального менеджера. Неплохо кастомизируется и расширяется через through-модель, сам умеет создавать уже набившее всем оскомину облако тегов и делает некоторые другие стандартные вещи (типа добавить/удалить тег). Документация совсем небольшая, но исчерпывающая, поэтому на знакомство не уйдёт много времени.

Гитхаб
Доки

django-sphinx


Sphinx, популярный поисковый движок, — наше всё, благодаря его скорости, гибкости и способности учитывать особенности русской морфологии, чего не скажешь о его ближайших конкурентах. Несмотря на популярность, существует одно единственное решение-интегратор для Django — django-sphinx.

Что даёт?
  • полная поддержка Sphinx API <= 0.9.9
  • поисковые запросы через менеджер моделей, можно уточнять такие параметры как вес полей или названия индексов прямо в описании класса модели
  • на основе указанных параметров умеет автоматически генерировать sphinx-конфиг
  • псевдо`queryset (SphinxQueryset) на выходе, что также удобно для работы с выборкой
И в то же время:
  • есть проблемы при дополнительной обработке объекта выборки
  • несколько досадных открытых багов в оригинальном пакете django-sphinx (например, exception при использовании метода exclude), хотя они исправлены в нашем форке
  • совсем нет тестов, скудная документация
  • пакет не поддерживается и больше не развивается своим автором
В ближайшие дни мы поделимся с вами опытом работы с этим модулем и постараемся детально описать обнаруженные подводные камни. Масса нюансов тянет на отдельную статью.

Гитхаб (наш форк)

Полезные статьи (местами не совсем актуальные):

django-celery


По-настоящему незаменимая батарейка на более-менее крупных проектах, где без асинхронных задач не обойтись. Фактически, Celery — де-факто стандарт для реализации очередей в питоне, она обладает широким набором фич, поддерживает разнообразные бэкенды и имеет приятный API.

На Хабре была пара хороших статей о том как работать с celery, в том числе настройка и подводные камни при интеграции с Django:
Гитхаб
Документация

django-hosts


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

Гитхаб
Документация

P.S. Наш скромный вклад в опенсорс github.com/futurecolors и github.com/coagulant
Теги:
Хабы:
+52
Комментарии42

Публикации

Истории

Работа

Python разработчик
135 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн