Django  —  один из самых популярных во всем мире Python-фреймворков: на нем построены многие известные сайты, такие как Instagram, Pinterest, Mozilla.

Хотя уже написано много замечательных учебников, совершенствующих навыки разработки на Django, большинство из них ориентированы на новичков.

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

Содержание:

  • Пишите тесты.
  • Используйте select_related и prefetch_related.
  • Пользуйтесь инструментами отладки.
  • Не изобретайте колесо.
  • Создавайте приложения с нуля.

Начните писать тесты

Когда я только начал программировать, то еще не знал о важности написания тестов. Учебники, по которым я изучал Django в самом начале, тоже не акцентировали своё внимание на данном аспекте разработки.

Написание тестов поначалу может раздражать и занимать много времени. Чаще всего пользу от написания тестов не видно на короткой дистанции  —  здесь и сейчас, однако она всё очевиднее проявляется со временем.

Тесты помогают другим разработчикам допускать гораздо меньше ошибок во время добавления нового функционала в ваше программное обеспечение.

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

Если сейчас вы как раз на пути выхода из ада учебников по Django для новичков, то вам самое время узнать и подумать об эффективности своих SQL-запросов. Насколько быстро они выполняются сейчас, и могут ли они выполняться быстрее?

Составление эффективного SQL запроса с использованием Django ORM крайне важно, когда в таблицах базы данных содержится много строк, что сильно влияет на общую производительность веб-приложения.

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

  • Вкратце, select_related выполняет запрос SQL JOIN с оператором SQL SELECT, содержащим колонки связанного объекта.
  • Используйте select_related, когда объект запроса является одним объектом-экземпляром модели с “прямым” ForeignKey или OneToOne полем отношения.
  • С другой стороны, prefetch_related выполняет отдельный поиск объектов для каждого поля отношения модели, “соединяя” их в Python.
  • Используйте этот метод, когда вы собираетесь получить набор объектов.
  • Используйте prefetch_related, когда сталкиваетесь с полем отношения ManyToMany или “обратным” полем отношения ForeignKey.

Если вы запутались в том, что означает “прямое” или “обратное” поле отношения ForeignKey, то вот пример:

Пользуйтесь инструментами отладки

Сегодня Django ORM временами обвиняют в наличии множества неоптимизированных запросов. Для определения правильного способа решения проблемы таких запросов, разработчикам часто необходимо выявлять “узкие места” в уровне производительности своих программ; хорошо, что для решения проблемы “бутылочных горлышек” уже создано множество специализированных инструментов, которые важно иметь под рукой.

print(qs.query)

Для начала, стоит уделить внимание SQL-запросу, производимому Django ORM queryset с помощью выполнения банальной функции print:

Самый простой пример того, как можно вывести на экран результат SQL-запроса

Воспользуйтесь django-debug-toolbar или django-silk

django-debug-toolbar  —  это простой пакет, удобно предоставляющий отладочную информацию об основном выполненном запросе.

Альтернативой использованию django-debug-toolbar можно назвать django-silk  —  профилирвщик веб-приложений на Django. Данный модуль помогает найти узкие места в производительности проекта, чтобы оптимизировать их для достижения лучших результатов.

Не изобретайте колесо

Очень часто во время решения проблемы возникает соблазн написать собственный модуль; но сначала стоит постараться погуглить.

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

cookiecutter-django

Наконец, если вы начинаете новый проект Django, то вам может оказаться полезным обратить внимание на модуль cookiecutter-django, поскольку в нём реализован такой функционал, как особая модель пользователя, регистрация через django-allauth, отправка писем через Anymail и многие другие другие решения, подготовленные к использованию в коммерческих проектах.

awesome-django

Также обратите внимание на список awesome-django, чтобы в кратчайшие сроки ознакомиться со множеством замечательных библиотек, полезных в разработке каждому Python Django программисту.

Заключение

Многие разработчики Python Django среднего уровня начинают решать слишком много обучающих заданий и задач из руководств.

Начните создавать готовые программные решения и перестаньте решать задачки из руководств.

Лучше попробуйте создать проект на Django с нуля самостоятельно  —  именно такой подход способен эффективнее всего помочь вам в освоении Django на профессиональном уровне.

Со временем, занимаясь разработкой проекта с нуля, вы заметите изменения в собственном способе поиска ответов на вопросы. Вместо того, чтобы вбивать в Google пространные описания неполадок, вы начнете искать конкретные ключевые слова в документации Django. В конечном итоге, существенно повысится ваша эффективность поиска необходимых решений на Stack Overflow и в других местах.

Решение проблемы “Я не знаю, что мне делать!”

Лучший способ найти ту самую идею для собственного веб-приложения  —  это придумать “домашний” проект, который бы решал ваши персональные проблемы, то есть, те, которые вы часто замечаете вокруг. Даже если проект получится не слишком технологически совершенным, он все равно будет решать актуальную проблему и покажет окружающим ваши навыки.

Не беспокойтесь, вы обязательно научитесь хорошо разбираться в (почти) всем, если будете долго практиковаться!

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Оригинал статьи: 4 Intermediate Tips To Power Up Your Django Development Skills by Jerry Ng

Предыдущая статьяСоздание простого веб-скрейпера на Ruby
Следующая статьяО машинном обучении простым языком