Джанго программирование: Django – Фреймворк для веб-приложений на Python / Хабр

Содержание

В каких случаях стоит использовать Django (а в каких не стоит)

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

Не стоит хвататься за определенный язык программирования или фреймворк лишь потому, что вы пользовались им в вашем предыдущем проекте, или просто потому что он вам хорошо знаком. Так дела не делаются.

Прежде чем приступать к новому проекту, следует оценить, какой язык или фреймворк лучше всего подойдет вам для достижения желаемого результата. Что для вас наиболее важно? Безопасность, скорость разработки, масштабируемость, универсальность, поддержка?

Лучше принять информированное решение перед тем как приступать к работе, чем потом раскаиваться в поспешном (или, хуже того, навешивать на проект костыли в процессе реализации – из-за того, что заранее не озаботились его поддержкой).

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

Понимаю, это громкое заявление. Позвольте мне его обосновать.

«На Django основано множество сайтов, используемых самым активным образом, в частности, Instagram и Pinterest. Даже Facebook использует Django для многих своих утилит. Django зародился в издательской среде, поэтому неудивительно, что данный фреймворк используется на таких сайтах как The Washington Post и Smithsonian Magazine.” — Амит Ашвини, Вице-президент по маркетингу @ Zibtek

Общий взгляд: когда использовать Django

Если хотя бы несколько из нижеприведенных тезизов – про вас (и в списке нет тезисов, с которыми вы категорически не согласны), то, вполне вероятно, Django хорошо подойдет для вашего проекта.

  • Вам требуется разработать веб-приложение или серверную часть API.
  • Требуется быстро работать, быстро развертывать и вносить изменения в проект по ходу работы.
  • По умолчанию приложение должно быть защищено от наиболее распространенных уязвимостей и атак, в частности: CSRF, SQL-инъекции, XSS, кликджекинг, etc.
  • В любой момент в приложении может потребоваться масштабирование: как наращивание, так и сокращение.
  • В перспективе вы планируете интегрировать новейшие технологии, например, машинное обучение.
  • Вам нужно использовать надежный фреймворк, который активно разрабатывается, используется многими топовыми компаниями и ведущими веб-сайтами во всем мире.
  • Требуется, чтобы и веб-приложение, и серверная часть API находились в одной и той же базе кода, согласовываясь с «единым источником истины» (принцип DRY)
  • Вы не хотите работать непосредственно с запросами к базе данных, и вам нужна поддержка ORM.
  • Вы собираетесь пользоваться свободным ПО.
  • Если застрянете – то решение придется искать самостоятельно, поэтому вам понадобится хорошая документация и отзывчивое сообщество разработчиков.

Кроме вышеупомянутых факторов нужно учитывать, какими навыками обладаете вы (или ваша команда).

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

Сайты, работающие на фреймворке Django

История Django насчитывает уже около 10 лет. За этот период он использовался в продакшене на множестве топовых сайтов. Вот некоторые выдающиеся примеры:
Pinterest Engineering
Mozilla
Bitbucket
Udemy
The Onion
Disqus
Washington Post
NASA
Spotify
Instagram Engineering
National Geographic
The Guardian
JSFiddle

Вы еще сомневаетесь, стоит ли тратить свое драгоценное время, чтобы напрактиковаться с Django? Для начала давайте обсудим, по каким причинам Django может НЕ ПОДОЙТИ для вашего проекта:

Когда не стоит использовать Django

  • Вы имеете дело с колоссальным приложением, и оно попросту не умещается в одной базе кода. Возможно, лучше будет разбить ваше приложение на микросервисы. С каждым его уровнем качественнее справится специально выделенная команда. Для каждого конкретного сценария использования подойдут иные технологии. В некоторых таких сценариях может пригодиться и Django, но было бы нецелесообразно полностью разрабатывать такое приложение на Django (равно как и на любом другом отдельно фреймворке).
  • Необходимо написать простейшее приложение, в котором не требуется работать с базой данных, выполнять операции с файлами или делать что-либо хоть немного сложное.
    Для таких ситуаций лучше подойдут микрофреймворки. Один из наиболее популярных микрофреймворков – Flask, как и Django, он написан на Python. Подобные микрофреймворки доступны и в рамках других технологий, напр. Slim в PHP, Apache Spark в Java, Express.js в Node.js, т.д.
  • Вы хотите сами написать все с нуля и знаете, что делаете.
  • Вы или ваши коллеги совершенно не знакомы с Django/Python, и у вас нет времени и ресурсов на наработку необходимых навыков.
    Наилучшее решение в последнем случае – работать с тем, в чем вы лучше всего разбираетесь. Если берешься за новую технологию или фреймворк, то шансы напортачить возрастают многократно.

Если все вышесказанное – не про ваш проект, то, вполне вероятно, Django вам подойдет.

Причины использовать Django

Фреймворк Django написан на Python:
Знаю, вам это известно.

Поэтому воспользуюсь случаем и подчеркну некоторые ключевые достоинства Django, которые он унаследовал от Python. Буду краток.

Python – один из самых популярных и быстрорастущих языков программирования в мире.

Источники:

TIOBE index
Indeed.com Jobs’ data analysis by Coding Dojo
GitHub Octoverse

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

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

Язык Python отлично подходит для разработки инструментов веб-скрапинга.

Он хорошо взаимодействует с другими языками.

Разработка на Python не означает, что вы будете вынуждены все и вся писать только на Python.

Вы вполне сможете пользоваться библиотеками для многих других языков, в том числе, C/C++/Java.

Python портируемый, его удобно читать.

Python даже может работать на JVM. Познакомьтесь с Jython.

Python широко используется в таких востребованных технологиях как Большие Данные и Машинное обучение.

Вы получаете доступ к огромной библиотеке PyPI.

У Django “Все включено”

“Все включено” означает, что Django «из коробки» оснащен большинством библиотек и инструментов, нужных в распространенных практических ситуациях. Перечислю: Django ORM, промежуточное ПО, аутентификация, HTTP-библиотеки, многосайтовая поддержка, i18n, Django Admin, движок-шаблонизатор, т.д. – и это еще не «все». Ни один другой известный мне фреймворк не предоставляет столь широкой поддержки сразу.

Некоторые считают такое обстоятельство “минусом”, а другие – «плюсом». Каждая сторона права по-своему, и я в некоторой степени согласен с обеими.

Это минус, поскольку в такой ситуации фреймворк превращается в монолит.

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

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

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

Не изобретать велосипед – вы помните? Потратьте ваше время на то, что действительно важно, а Django пусть сделает все остальное.

Django Admin

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

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

На самом деле, Django Admin очень хорошо структурирован. В некоторых моих проектах я использовал админку Django «как есть», а в других полностью заменял ее собственными шаблонами, которые разрабатывал с нуля. В любом случае, на это потребовалось не больше времени, чем на разработку с любым другим известным мне фреймворком.

Основной плюс? Вы получаете «из коробки» права доступа и аутентификацию. На разработку всего этого с нуля у вас ушли бы недели (или, как минимум, несколько дней).

Принцип DRY (Не Повторяйся)

Мне известно множество фреймворков, сторонники которых утверждают, что те действительно соответствуют принципу “DRY”. Я работал с многими такими фреймворками, но ни в одном из них принцип «DRY» не реализован как следует.

К сожалению, в большинстве фреймворков принципу “DRY” просто не уделяют достаточного внимания. На мой взгляд, если вы пишете приложение, которое собираетесь регулярно обновлять (а это можно сказать о большинстве современных приложений), то вы должны следовать принципу DRY во избежание проблем.

Так, в Laravel приходится писать валидацию для каждой процедуры отдельно. Такова же ситуация и с большинством других фреймворков. Чтобы ваш код соответствовал принципу DRY, нужно потрудиться. Сложно это отслеживать, особенно если вы работаете в команде.

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

Так быть не должно, верно? Рассмотрим пример.

Вот как в Django устроена валидация и миграция базы данных

Создаем класс Model с требуемыми полями. Указываем все необходимые нам дополнительные валидации и ограничения.

Миграции генерируются единственной CLI-командой: `python manage.py makemigrations`.

Изменения вносятся в базу данных единственной CLI-командой: `python manage.py migrate`.

Валидации и ограничения автоматически проверяются при каждой CRUD-операции  —  идет ли речь о Django Admin или о Django REST Framework. Писать валидации заново вам не придется.

Тот же самый класс модели используется для генерации представлений Django Admin CRUD. Не требуется дописывать никаких собственных HTML/CSS.

Сравните эти условия с любым другим фреймворком – и, думаю, вам бы нигде не удалось сделать ничего подобного всего в несколько следующих строк кода:

class Employee(models.Model):
    name = models.CharField(max_length=127)
    email = models.EmailField(null=True, blank=True)
    created_at = models.DateTimeField(blank=True, null=True, auto_now_add=True)
    updated_at = models.DateTimeField(blank=True, null=True, auto_now=True)

Здесь речь не только о том, чтобы “не повторяться”. Такой подход уберегает вас от багов в перспективе. Все мы оказывались в ситуациях, когда довелось изменить что-то в одном месте, а в другом месте заменить забыли – и это выяснилось лишь после того, как у множества пользователей начались проблемы.

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

Объектно-реляционное отображение в Django

Django предоставляет полнофункциональный механизм ORM «из коробки».

Я работал со множеством инструментов ORM в разных технологиях, в том числе, в Eloquent, greenDAO, Yii AR, т.д. Во всех из них простейшие запросы обрабатываются довольно хорошо, но рано или поздно мне приходилось писать те или иные запросы с нуля, поскольку механизм ORM не справлялся с конкретным практическим случаем.

С Django ORM в такие ситуации я пока не попадал. Он сработан настолько хорошо, что вы просто можете забыть, что работаете с запросами к базе данных. Именно таким и должно быть объектно-реляционное отображение. Ниже приведены некоторые примеры Django ORM:

# получает 5 верхних результатов, где rank = 10 и age <= 30
top_young_employees = Employee.objects.filter(rank=10, age__lte=30)[:5]
# вставляет запись с указанными значениями
employee = Employee.objects.create(name=’John Doe’, age=35, country=’IN’)
# выводит на экран значение поля
print(employee.name)

Стремительная разработка

Этим любят похвастаться создатели практически любого веб-фреймворка, и, пожалуй, все они действительно правы – смотря какой смысл мы вкладываем в слово «стремительная».

Правда, с Django некоторые вещи делаются уморительно быстро. Вы уже видели, как легко мы смогли определить UI админки, таблицу базы данных и выполнить валидацию.

Это была всего лишь верхушка айсберга.

В принципе, стремительная разработка – это не фича как таковая, а лишь органичное следствие присутствующих в Django DRY, ORM, шаблонизатора и философии «все включено».

Безопасность фреймворка Django

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

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

Опенсорс, отличная документация, огромное сообщество и пр.

Поскольку Django – опенсорсный и безумно популярный фреймворк, вокруг него сформировалось отзывчивое сообщество. Думаю, вы в курсе, каковы достоинства свободного ПО – так вот, все они присущи и Django.

Официальной документации Django более чем достаточно любому разработчику. Если застрянете – найти решение не составит труда.

У вас уже могло сложиться впечатление, что в Django создано множество собственных библиотек, поэтому, возможно, удивитесь, что специальной библиотеки для тестирования здесь не сделано. Нет, не подумайте, что фреймворк Django не поддерживает тестирование – поддерживает, еще как. Просто, следуя принципу «Не повторяйся» было бы бессмысленно разрабатывать библиотеку для тестирования, когда отличная библиотека такого рода уже есть в самом Python. Django отлично с ней взаимодействует. Кроме того, он очень хорошо сочетается и со сторонними библиотеками, например, pytest.

Современное состояние Django и другие популярные фреймворки

Итак, я по максимуму постарался осветить те проблемы, с которыми сталкивался при работе с другими фреймворками и сравнить эти фреймворки с Django. Поработав с Yii, CodeIgniter, WordPress, CS-Cart, Laravel, т.д., я пришел к выводу, что Django гораздо лучше любого из них.
Однако, это только мое мнение.

Если вам нравится статистика, то вот ежегодное исследование Stack Overflow, где Django фигурирует в числе самых излюбленных и востребованных фреймворков:

Frameworks, Libraries, and Tools
Most Loved, Dreaded, and Wanted Frameworks, Libraries, and Tools

Кроме вышеупомянутого опыта работы с PHP, я также рапзрабатывал приложения под Android на Java, клиентские приложения на React.js. Во всех этих случаях я потратил изрядное количество времени на рефакторинг базы кода, подыскивая наилучшую архитектуру, через пару месяцев увязая в проблемах с масштабируемостью и вновь принимаясь за рефакторинг.

Недавно я переписал с Laravel на Django одно приложение, которое было у меня в продакшене более года. Мне удалось развернуть новую базу кода менее чем за 10 дней, написав для этого минимальное количество кода (говорю же: сложность уменьшается!) В обратном направлении подобная операция определенно заняла бы более месяца.

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

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

Однако, здесь мы рассуждаем не только о фреймворках, относящихся к другим технологиям. Даже если вы знакомы c Python, возможно, микрофреймворк Flask покажется вам более удобным и желательным. Придется задуматься, на котором из них остановиться.

Мой совет – просто не сравнивайте их.

Вывод

На мой взгляд, в Django удалось идеально сбалансировать производительность, архитектуру, уровень сложности при разработке, безопасность и масштабируемость.

Если вы начинаете писать проект с нуля – настоятельно рекомендую попробовать сделать его с Django.

Плюсы и минусы Django / Хабр

Прим. перев.: Эта статья рассчитана в основном на тех кто только выбирает фреймворк для веб-разработки. Опытные разработчики на Django вряд ли узнают что-то новое.

Django описывают как «веб-фреймворк для перфекционистов с дедлайнами». Его создали, чтобы переходить от прототипов к готовым сервисам как можно быстрее.

Фреймворк поможет разработать CRUD приложение под ключ. С Django не придется изобретать велосипед. Он работает из коробки и позволит сосредоточиться на бизнес-логике и продуктах для обычных людей.

Плюсы Джанго

Принцип «Всё включено» («Batteries included»)

Фраза «всё включено» означает, что большинство инструментов для создания приложения — часть фреймворка, а не поставляются в виде отдельных библиотек.

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

  • ORM
  • Миграции базы данных
  • Аутентификация пользователя
  • Панель администратора
  • Формы

Стандартизированная структура

Django как фреймворк задаёт структуру проекта. Она помогает разработчикам понимать, где и как добавлять новую функциональность.

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

Приложения Django

Приложения в Django позволяют разделить проект на несколько частей. Приложения устанавливаются путём добавления в settings.INSTALLED_APPS. Этот подход позволяет легко интегрировать готовые решения.

Сотни универсальных модулей и приложений очень сильно ускорят разработку. Взгляните на их список на сайте djangopackages.org.

Безопасный по умолчанию

Django безопасен из коробки и включает механизмы предотвращения распространенных атак вроде SQL-инъекций (XSS) и подделки межсайтовых запросов (CSRF). Подробнее об этом можно почитать в официальном руководстве по безопасности.

REST Framework для создания API

Django REST Framework, который часто сокращают до «DRF», является библиотекой для построения API. Он имеет модульную и настраиваемую архитектуру, которая хорошо работает для создания как простых, так и сложных API.

В DRF политики аутентификации и разрешений доступны из коробки. Он поставляется с базовыми классами для CRUD операций и встроенной утилитой для тестирования разрабатываемого API.

GraphQL фреймворк для создания API

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

Graphene-Django позволит легко добавить соответствующую функциональность в ваш проект. Модели, формы, аутентификация, политики разрешений и другие функциональные возможности Django можно использовать для создания GraphQL API. Библиотека так же поставляется с утилитой для тестирования результата.

Недостатки Джанго

Django ORM

Django ORM сегодня значительно уступает последней SQLAlchemy.

Django ORM основан на шаблоне Active Record, который хуже, чем шаблон Unit of Work, используемый в SQLAlchemy. На практике это выражается в том, что в Django модели могут «сохранять» себя по желанию, а транзакции отключены по умолчанию. Подробнее об этом можно почитать в статье «Вещи, которые мне не нравятся в Django».

Django развивается медленно

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

В итоге: должен ли я выбрать Django?

Хотя Django ORM не так гибок, как SQLAlchemy, а большая экосистема многократно используемых модулей и приложений замедляет развитие инфраструктуры, очевидно, Django должен быть первым кандидатом на роль фреймворка для питониста.

Альтернативные легкие фреймворки типа Flask, хотя и позволяют быть свободнее Django в экосистеме и конфигурации, могут потребовать лишнего времени на поиск/создание дополнительных библиотек и функциональных возможностей в долгосрочной перспективе.

Стабильность Django и сообщество вокруг него выросли до невообразимых размеров с момента первого релиза. Официальная документация и учебные пособия по фреймворку являются одними из лучших в своём роде. А с каждой новой версией Django продолжает обрастать возможностями.

10 пакетов Django, которые вы должны знать обязательно!

Вы вскоре собираетесь начать проект на Django? Вероятно, вам любопытно, есть ли какие-нибудь полезные пакеты, которые могли бы вам помочь. Мы составили  список самых нужных пакетов Django. Приложенные короткие описания и ссылки на сами пакеты помогут вам начать работать с ними как можно скорее. Все пакеты, которые мы выбрали, поддерживают Python 3 и находятся в стабильной версии.

Готовы ли вы исследовать мир пакетов Django? Погружаемся!

Но прежде всего — является ли Django библиотекой?

В мире инструментов Python легко заблудиться, ведь сегодня в его экосистеме доступно так много новых фреймворков и библиотек. Но все же стоит уточнить: Django — это не библиотека, а фреймворк.

Django — бесплатный высокоуровневый фреймворк с открытым кодом для разработки веб-приложений на Python, позволяющий ускорить разработку и создавать более чистый дизайн. Он был создан избавить программистов от лишних хлопот, связанных с разработкой веб-приложений, без необходимости заново создавать велосипед. А значит – писать меньше строк кода!

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

Разница между модулями и пакетами в Django?

Модули и пакеты иногда путают друг с другом, поэтому, прежде чем перейти к нашему списку, давайте рассмотрим разницу между ними.

Модуль — это один файл Python, а пакет — это каталог таких модулей. В отличие от простых директорий, содержащих скрипты Python, пакет содержит еще и дополнительный файл — _init_.py.

Лучшие пакеты Django

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

1. Sentry-sdk

Описание:

Sentry-sdk — обязательный инструмент для любого проекта Django, так как он позволяет нам быть в курсе всех связанных с кодом проблем в приложении.

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

Во-вторых, мы можем сами обнаружить проблему и отправить информацию о ней в sentry, добавив дополнительные данные.

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

Чем полезен этот пакет:

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

Особенности:

  • Sentry будет ловить любые неучтенные исключения и немедленно отправлять нам полную информацию о проблеме.
  • Когда код работает правильно, sentry полезен в качестве системы оповещения, в которую мы можем отправлять ошибки или логи о любых ненормальных событиях.

2. Django REST framework

Описание:

Если вы хотите написать API архитектурных ограничений REST, Django REST framework сделает это за вас. Также он автоматически сгенерирует правильную документацию, поддерживающую реализацию пакета в проектах.

Чем полезен этот пакет:

Нет необходимости самостоятельно писать REST API.

Особенности:

  • Для создания конечных точек REST API для ваших моделей потребуется всего несколько строк кода.
  • Автоматически сгенерированная документация — отличная вещь, потому что она всегда меняется вместе с конечными точками.

3. Django-extensions

Описание:

Django-extensions — набор инструментов, которые помогут вам в вашей повседневной работе. JSONField был впервые представлен в этом пакете еще до того, как он официально стал частью Django 1.9 (для PostgreSQL, конечно).

Чем полезен этот пакет:

  • Добавляет кучу случайных полезных функций.

Особенности:

  • Команда shell_plus запускает оболочку Django с предварительно загруженными файлами, классами и моделями, которые ускоряют любую работу с этой оболочкой.
  • Дополнительное поле AutoSlugField генерирует уникальный slug для заданных данных.
  • Дополнительные поля CreationDateTimeField и ModificationDateTimeField сохраняют в базе данных первое и последнее изменение даты и времени соответственно.

4. Django-rest-framework-jwt

Описание:

При использовании DRF для некоторых проектов необходимо добавить JWT-аутентификацию. Для этого и предназначен этот пакет.

Чем полезен этот пакет:

  • Вам не придется самостоятельно реализовывать токен аутентификации для API и управлять им.

Особенности:

  • Предоставляет все необходимое для JWT-аутентификации: конечную точку входа и класс Django auth.

5. Django-rest-swagger

Описание:

DRF предлагает автоматически сгенерированную документацию, а этот пакет делает документацию для ваших проектов более красивой.

Чем полезен этот пакет:

  • Бесплатное создание красивой документации на основе API DRF.

Особенности:

  • Хорошая автоматическая документация для ваших конечных точек.
  • Пользовательские конечные точки легко документировать вручную.

6. Easy-thumbnails

Описание:

Любой веб-сервис, позволяющий загружать и просматривать фотографии, нуждается в возможности создания миниатюр. Easy-thumbnails обеспечивает это.

Чем полезен этот пакет:

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

Особенности:

  • Динамическое создание миниатюр на основе загруженного изображения.

7. Django-simple-history

Описание:

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

Чем полезен этот пакет:

  • Сохраняет историю измененных строк в базе данных.

Особенности:

  • Отслеживает все изменения модели, в то время как настройка не занимает много времени.

8. Django-adminactions

Описание:

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

Чем полезен этот пакет:

  • Добавляет некоторые функции, которые могут пригодиться на ранних стадиях разработки приложения.

Особенности:

  • Экспорт данных из админки в XSL, CSV, Fixture.

9. Django-model-utils

Описание:

Django-model-utils — набор полезных утилит для моделей Django.

Чем полезен этот пакет:

  • Добавляет некоторые модели и поля, которые помогают с некоторыми распространенными проблемами.

Особенности:

  • Поле MonitorField, которое является полем DateTime и обновляется до now() каждый раз, когда ему требуется обновление.

10. Django-storages

Описание:

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

Например, пользователь может отправить нам много существенных данных, таких как фотографии, фильмы или даже резервные копии. Чтобы сделать эти данные доступными для него, не замедляя работу приложения, рекомендуется использовать облачные решения для хранения данных, такие как Google Cloud.

Чем полезен этот пакет:

  • Использование практически любого удаленного хранилища в качестве хранилища файлов фреймворка по умолчанию.

Особенности:

  • Позволяет использовать s3 или Google storage в качестве хранилища файлов по умолчанию.

Дополнительно: что такое Django Allauth?

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

Django-allauth

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

Почему мы включили его сюда:

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

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

Вывод

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

Мы надеемся, что этот список пакетов поможет вам, когда вы будете создавать свое следующее веб-приложение с использованием Python и Django. Если вы хотите узнать больше о пакетах Django, загляните на этот полезный сайт: https://djangopackages.org/.

Кроме того, не забудьте просмотреть и другие статьи на нашем сайте: в них вы найдете еще больше полезных советов по созданию приложений на Django!

Когда использовать Django? Когда использовать Django?

Когда использовать Django?, Когда использовать Django?

Три примера и преимущества для различных отраслей индустрии

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

Одним из факторов его успеха является растущая популярность языка Python. Согласно индексу theTIOBE, Python является одним из самых популярных языков программирования. Его использование становится все более распространенным, поскольку организации используют Python для проектов в таких сложных областях, как data science.

Задаетесь ли вы вопросом о том, где можно использовать Django, чтобы иметь наибольшее преимущество?

Вот 3 примера успешных стартапов, которые делают упор на этот фреймворк с самого начала.

Но прежде всего, что такое Django?

Django — это веб-фреймворк с открытым исходным кодом, написанный на языке программирования Python. Фреймворк предлагает большую ценность для любого проекта веб-разработки. Данная технология поставляется с набором готовых компонентов, которые помогают ускорить и упростить процесс создания веб-приложений.

Фреймворк содержит удобные компоненты, реализующие наиболее распространенные функции, которые мы находим в веб-приложениях. Например, аутентификацию пользователей, панель управления, загрузку файлов и многое другое.

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

Ключевые преимущества Django

Фреймворк стал ключевой технологией веб-разработки по целому ряду причин.

Язык программирования Python

Python — одна из самых популярных технологий разработки программного обеспечения в мире. Найти талантливых разработчиков Python легко. Дело в том, что этот язык преподается в университетах, будучи полезным академическим и научным сообществам.

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

Вот что говорит о себе Python: «разработка программ с использованием Python происходит в 5-10 раз быстрее, чем с использованием C/C++, и в 3-5 раз быстрее с использованием Java. Во многих случаях прототип приложения может быть написан на Python без написания какого-либо кода C/C++/Java. Часто прототип является достаточно функциональным и крайне хорошо работает, чтобы быть поставленным в качестве конечного продукта, экономя значительное время на разработку.”

Структура

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

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

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

Философия «batteries included»

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

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

Удивительное сообщество

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

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

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

Лучшие стартапы, использующие Django

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

Примечание: древний стартап — это компания, созданная как стартап более 8 лет назад.

Disqus

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

Disqus преуспевает с 17 миллиардами ежемесячных просмотров страниц. Разработчики имеют хороший опыт работы с фреймворком Django и не планируют менять его в будущем. Это просто работает на них. Команда Disqus даже разработала Sentry, который позволяет ловить все виды ошибок в рамках фреймворка.

«Медленные запросы к базе данных и сетевая задержка обычно перевешивают накладные расходы на производительность надежного фреймворка, такого как Django”, – сказал Мэтт Робенолт из Disqus несколько лет назад, и похоже, что его мнение с тех пор не изменилось.

Instagram

Инстаграм — это социальная сеть для обмена фотографиями и видео. Instagram был запущен в 2010 году примерно через две недели после того, как его соучредители Кевин Систром и Майк Кригер Кевин начали создавать свою первую версию. Они признались, в благодарности Django: «это была очень простая установка с одним способом делать вещи».

Компания была создана в темные времена Django v1.3 и ранее. В то время как, Django ORM страдал от проблемы оптимизации. Эти проблемы ORM не были заметны до июня 2011 года, когда компания поразила 5 миллионов пользователей. Сейчас все работает нормально. Однако, чтобы обезопасить приложение на будущее, разработчики Instagram начали исправлять Django v1.3 и в конечном итоге переписали ORM Django.

До сих пор платформа использовала Django без каких-либо проблем. Более того, данная социальная сеть в настоящее время является одним из двух платиновых корпоративных членов, поддерживающих Django (другой — JetBrains). Все сотрудники в этой компании (и Facebook, которой принадлежит платформа) разрешается вносить код непосредственно в Django. Это самое высокое достижение поддержки, и оно определенно показывает сильные отношения между Instagram и Django.

Pinterest

Pinterest — это социальная медиа-платформа, которая опирается на кураторство изображений с помощью сложных алгоритмов. Его разработка началась в декабре 2009 года, а закрытая бета-версия была запущена в марте 2010 года.

Все стартапы в нашем списке используют Django с самого начала стадии разработки. К сожалению, по мере того, как Pinterest становился все более заметным, он начал страдать от проблем Django ORM, таких как Instagram. Его ORM был просто недостаточно быстр. Например, делая двойные и тройные вызовы к базе данных (во время одной из Python конференции разработчики платформы подтвердили, что эти проблемы были исправлены в Django 1.6).

По мере роста Pinterest сначала переместил большую часть логики в базу данных, а затем изменил свою структуру с Django на Flask. С конца 2011 года Pinterest использует Flask. С января 2012 года comScore сообщила, что сайт имеет 11,7 миллиона уникальных посетителей в США. Это делает его самым быстрым сайтом, когда-либо преодолевшим отметку в 10 миллионов уникальных посетителей.

Итак, когда вы должны использовать Django?

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

Кейсы компаний

Disqus быстро рос без каких-либо проблем и получил миллионы пользователей благодаря быстрому процессу разработки с Django. Это позволило быстро добавлять новые функции и поддерживать интерес пользователей.

Instagram благодарен сообществу фреймворка, которое в настоящее время поддерживает фреймворк, внося в него свой вклад. Если бы не это сообщество, которое так усердно работало, чтобы сделать Django быстрее, возможно, платформа развалилася бы. Разработчики платформы один раз за 10 месяцев обновили свои версии с Python 2.7, Django 1.3 до Python 3.5, Django 1.8. Это показывает ценность новых обновлений, поступающих от сообщества Django.

И, наконец, Pinterest тоже получил свой шанс благодаря Django. Если бы не быстрый процесс разработки, высоко оцененный разработчиками, Pinterest потребовалось бы больше времени для запуска на рынок. А что, если Pinterest начнет с Flask? У Django есть все, что нужно веб-стартапу, благодаря его подходу «batteries included». Это делает создание веб-приложения с нуля просто намного быстрее.

Вывод

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

Setting up a Django development environment — Изучение веб-разработки

Теперь, когда вы знаете, что такое Django, мы покажем вам, как настроить и протестировать среду разработки Django для Windows, Linux (Ubuntu) и Mac OS X — какую бы операционную систему вы не использовали, эта статья должна дать вам все, что необходимо для возможности начать разрабатывать приложения Django.

Требования: Знание как открыть терминал / командную строку, как устанавливать программные пакеты в операционной системе вашего компьютера.
Задача: Создать среду разработки для Django (1.10) и запустить её на вашем компьютере.

Обзор среды разработки Django

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

Что такое среда разработки Django?

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

Основными инструментами, которые предоставляет сам Django, является набор скриптов Python для создания и работы с проектами Django, а также простой веб-сервер разработки, который можно использовать для тестирования локальных (то есть на вашем компьютере, а не на внешнем веб-сервере) веб-приложений Django на веб-браузере вашего компьютера.

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

Какие есть разновидности установки Django ?

Django очень гибок с точки зрения способа и места установки и настройки. Django может быть:

  • установлен на различных операционных системах,
  • установлен из исходного кода, из Python Package Index (PyPi) и во многих случаях из любого менеджера пакетов,
  • настроен на использование различных баз данных, которые должны быть установлены и настроены отдельно,
  • запущен в основной системе окружения Python или в отдельном виртуальном окружении Python.

Каждый из этих вариантов требует немного разной настройки и установки. Следующие подразделы объяснят некоторые аспекты вашего выбора. Далее мы покажем вам, как установить Django на некоторые операционные системы, и эта установка будет предполагаться на всём протяжении данного модуля.

Замечание: Другие возможные способы установки можно найти в официальной документации Django. Мы ссылаемся на соответствующие документы.

Какие операционные системы поддерживаются?

Веб-приложения Django можно запускать почти на любых машинах, которые поддерживают язык программирования Python 3, среди прочих: Windows, Mac OS X, Linux/Unix, Solaris. Почти любой компьютер имеет необходимую производительность для запуска Django во время разработки.

В этой статье мы предоставляем инструкции для Windows, Mac OS X, and Linux/Unix.

Какую версию Python стоит использовать?

Мы рекомендуем использовать самую последнюю доступную версию — на момент написания статьи это Python 3.6.

Замечание: Python 2.7 не может быть использован вместе с Django 2.0 (последние поддерживаемые серии для Python 2.7 — Django 1.11.x).

Откуда можно скачать Django?

Для загрузки Django можно воспользоваться 3 источниками:

  • The Python Package Repository (PyPi), при помощи инструмента pip. Это лучший способ получения последней стабильной версии Django.
  • Использование версии из менеджера пакетов вашего компьютера. Такие дистрибутивы Django, собранные для конкретных операционных систем, предлагают знакомый механизм установки. Однако обратите внимание на то, что пакетные версии могут быть достаточно старыми и установлены только в системную среду Python (что может отличаться от ваших желаний).
  • Установка из исходного кода. Вы можете получить и установить последний выпуск Django из исходного кода. Этот способ не рекомендован для новичков, но необходим в случае, когда вы готовы начать вносить собственный вклад в проект Django.

Данный материал описывает способ установки Django из PyPi с целью получения последней стабильной версии.

Какую базу данных выбрать?

Django поддерживает 4 основных базы данных (PostgreSQL, MySQL, Oracle и SQLite), также есть публичные библиотеки, которые предоставляют разные уровни поддержки других SQL и NoSQL баз данных. Мы рекомендуем вам выбрать одинаковую БД для обеих рабочей и разрабатываемой сред (несмотря на  то, что Django нивелирует множество различий баз данных при помощи Object-Relational Mapper (ORM), все равно возможны потенциальные проблемы, которых лучше избегать.

Для данной статьи (и большей части модуля) мы будем использовать базу данных SQLite, которая сохраняет свои данные в файл. SQLite предназначен для использования в качестве облегченной базы данных и не может поддерживать высокий уровень параллелизма. Это, однако, отличный выбор для приложений, которые в основном предназначены только для чтения.

Замечание: Django сконфигурирован для использования SQLite по умолчанию, при создании вашего проекта с использованием стандартных инструментов (django-admin). Это отличный выбор для начала работы, потому что он не требует дополнительной настройки.

Глобальная установка или установка в виртуальную среду Python?

Когда вы устанавливаете Python 3 на свой компьютер, вы получаете единую глобальную среду (набор установленных пакетов) для вашего кода Python, которая доступна любому коду на компьютере. Вы можете установить любые пакеты Python, необходимые вам в этой среде, но только одну конкретную версию конкретного пакета.

Замечание: Установленные в глобальную среду приложения Python потенциально могут конфликтовать друг с другом (т.е. если они зависят от разных версий одного и того же пакета).

Если вы устанавливаете Django в среду по умолчанию (глобальную), то будете способны сфокусироваться на одной версии Django на вашем компьютере. Это может быть проблемой в случае, если вы захотите создать новые вебсайты (при помощи новой версии Django) во время поддержки вебсайтов со старой версией.

По этой причине опытные разработчики Python / Django часто предпочитают вместо этого запускать свои приложения Python в независимых виртуальных средах Python. Это позволяет разработчикам иметь несколько разных сред Django на одном компьютере. Команда разработчиков Django сама рекомендует использовать виртуальные среды Python!

Этот модуль предполагает вашу установку Django в виртуальную среду, и мы покажем, как это сделать.

Установка Python 3

Для использования Django вам необходимо установить Python 3 на свою операционную систему. Вам также понадобится инструмент Python Package Index — pip3 — который используется для управления (установка, обновление и удаление) библиотек/пакетов Python, используемых Django и другими вашими приложениями Python.

Этот раздел коротко описывает то, как вы можете проверить имеющиеся версии и при необходимости установить новые для Ubuntu Linux 16.04, Mac OS X, and Windows 10.

Замечание: В зависимости от платформы, вы можете иметь возможность установки Python/pip из собственного менеджера пакетов операционной системы или при помощи других инструментов. Для большинства платформ вы можете скачать необходимые установочные файлы из https://www.python.org/downloads/ и установить их при помощи соответствующего специфичного для платформы метода.

Ubuntu 16.04

Ubuntu Linux включает в себя Python 3 по умолчанию. Вы можете удостовериться в этом, выполнив следующую команду в терминале:

python3 -V
 Python 3.5.2

Однако, инструмент Python Package Index, при помощи которого вам нужно будет установаить пакеты для  Python 3 (включая Django), по умолчанию не установлен. Вы можете установить pip3 через терминал bash при помощи:

sudo apt-get install python3-pip

Mac OS X

Mac OS X «El Capitan» не включает Python 3. Вы можете удостовериться в этом, выполнив следующую команду в терминале:

python3 -V
 -bash: python3: command not found

Вы можете легко установить Python 3 (вместе с инструментом pip3) с python.org:

  1. Скачайте нужный установочный файл:
    1. Перейдите в https://www.python.org/downloads/
    2. Нажмите на кнопку Скачать Python 3.6.4 (точная основная версия может отличаться).
  2. Найдите файл при помощи Finder, дважды кликните по нему и следуйте подсказкам по установке.

Удостовериться в успешной установке вы можете проверкой на наличие  Python 3, как показано ниже:

python3 -V
 Python 3.5.20

Подобным образом вы можете проверить установку pip3, отобразив список доступных пакетов:

pip3 list

Windows 10

Windows не включает Python по умолчанию, но вы можете легко установить его (вместе с инструментом pip) с python.org:

  1. Скачайте нужный установочный файл:
    1. Перейдите в https://www.python.org/downloads/
    2. Нажмите на кнопку Скачать Python 3.6.4 (точная основная версия может отличаться).
  2. Установите Python, дважды кликнув на скачанный файл и следуя инструкциям по установке.

После этого вы сможете подтвердить успешную установку Python путем выполнения следующего текста в командной строке:

py -3 -V 
 Python 3.5.2

Установщик Windows включает в себя pip3 (менеджер пакетов Python) по умолчанию. Вы можете отобразить список установленных пакетов, как показано далее:

pip list

Замечание: Установщик должен сделать все, что необходимо для корректной работы указанной команды. Однако, если вы видите сообщение о том, что Python не может быть найден, вам может потребоваться добавить его в системный путь.

Использование Django внутри виртуальной среды Python

Для создания виртуальных сред мы будем использовать библиотеки virtualenvwrapper (Linux и macOS X) и virtualenvwrapper-win (Windows), которые в свою очередь обе используют инструмент virtualenv. Инструмент обертки предоставляет совместимый интерфейс для управления интерфейсами на всех платформах.

Установка ПО виртуальной среды

Установка виртуальной среды для Ubuntu

После установки Python и pip вы можете установить virtualenvwrapper (который включает в себя virtualenv). Вы можете либо воспользоваться официальной инструкций по установке отсюда, либо следовать следующим инструкциям:

Установите инструмент при помощи pip3:

sudo pip3 install virtualenvwrapper

Затем добавьте следующие строки в конец файла загрузки программной оболочки (shell) (это скрытый файл в вашей домашней директории с именем .bashrc). Они устанавливают расположение виртуальных сред, расположение каталога разрабатываемого проекта и расположение установленного с этим пакетом скрипта.

export WORKON_HOME=$HOME/.virtualenvs 
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS=' -p /usr/bin/python3 ' 
export PROJECT_HOME=$HOME/Devel 
source /usr/local/bin/virtualenvwrapper.sh

Затем перезагрузите файл загрузки, выполнив в терминале следующую команду:

source ~/.bashrc

В этот момент вы должны увидеть запуск группы скриптов, как показано ниже:

virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/premkproject 
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/postmkproject 
... 
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/preactivate 
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/postactivate 
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/get_env_details

Теперь вы можете создать новую виртуальную среду при помощи команды mkvirtualenv.

Установка виртуальной среды для macOS X

Установка virtualenvwrapper на macOS X почти идентична Ubuntu (и снова вы можете воспользоваться либо официальными, либо следующими инструкциями).

Установите инструмент при помощи pip3:

sudo pip3 install virtualenvwrapper

Затем добавьте следующие строки в конец вашего файла загрузки программной оболочки:

export WORKON_HOME=$HOME/.virtualenvs 
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 
export PROJECT_HOME=$HOME/Devel 
source /usr/local/bin/virtualenvwrapper.sh

Замечание: Переменная VIRTUALENVWRAPPER_PYTHON указывает на обычное расположение Python3. Если virtualenv не работает во время тестирования, то вам следует проверить, находится ли интерпертатор Python в нужном расположении (и затем поменять его соответствующим образом в значении переменной).

Эти строки такие же, как в случае с Ubuntu, но файл загрузки в вашей домашней директории назван иначе — .bash_profile

Замечание: Если вы не можете найти и изменить .bash_profile при помощи Finder, то можно также открыть его при помощи редактора терминала nano.

Команды в этом случае выглядят примерно так:

cd ~ # Navigate to my home directory 
ls -la #List the content of the directory. You should see .bash_profile 
nano .bash_profile # Open the file in the nano text editor, within the terminal 
# Scroll to the end of the file, and copy in the lines above 
# Use Ctrl+X to exit nano, Choose Y to save the file.

После этого перезагрузите файл загрузки путем выполнения следующей команды в терминале:

source ~/.bash_profile

В этот момент вы должны увидеть запуск группы скриптов (те же скрипты, что и в случае установки на Ubuntu).

Теперь вы должны иметь возможность создания новой виртуальной среды при помощи команды mkvirtualenv.

Установка виртуальной среды для Windows 10

Установка virtualenvwrapper-win еще более проста, чем установка virtualenvwrapper, потому что вам не нужно настраивать расположения сохранения информации о виртаульной среде инструментом (эти значения заданы по умолчанию). Все, что вам нужно сделать, это запустить следующую команду в командной строке:

pip3 install virtualenvwrapper-win

Теперь вы можете создать новую виртуальную среду при помощи команды mkvirtualen.

Создание виртуальной среды

После установки virtualenvwrapper и virtualenvwrapper-win работа с виртуальными средами становится одинаковой для всех платформ.

Теперь вы можете создать новую виртуальную среду при помощи команды mkvirtualenv. Во время запуска команды вы увидите установку виртуальной среды (конкретные результаты команды очень зависят от платформы). После выполнения команды активируется новая виртуальная среда — заметить это вы можете по тому, что началом ввода будет название виртуальной среды в круглых скобках (как показано ниже).

$ mkvirtualenv my_django_environment 
Running virtualenv with interpreter /usr/bin/python3 ... 
virtualenvwrapper.user_scripts creating /home/ubuntu/.virtualenvs/t_env7/bin/get_env_details 
(my_django_environment) [email protected]:~$

Теперь вы находитесь внутри виртуальной области и можете установить Django и начать разработку.

Замечание: С этого момента в этой статье (и всем модуле) пожалуйста учитывайте, что любые команды запускаются в виртуальной среде Python, как та, что мы показали выше.

Использование виртуальной среды

Есть еще несколько полезных команд, которые вам следует знать (в документации по инструменту их гораздо больше, но эти вы будете использовать регулярно):

  • deactivate — Выход из текущей виртуальной среды Python
  • workon — Список доступных виртуальных сред
  • workon name_of_environment — Активация конкретной виртуальной среды Python
  • rmvirtualenv name_of_environment — Удаление конкретной виртуальной среды.

Установка Django

После создания виртуальной среды и вызова workon для входа в нее вы можете использовать pip3 для установки Django. 

pip3 install django

Вы можете проверить установку Django, выполнив следующую команду (она просто проверяет, что Python может найти модуль Django):

# Linux/Mac OS X
python3 -m django --version
 1.10.10

# Windows
py -3 -m django --version 
 1.10.10

Замечание: Для Windows вы запускаете скрипты Python 3 с префиксом команды py -3, в то время как для Linux/Mac OSX префикс — python3.

Важно: В оставшейся части материала используется вариант команды Linux для вызова Python 3 (python3) . Если вы работаете в Windows, то просто замените этот префикс на: py -3

Проверка вашей установки

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

mkdir django_test
cd django_test

Затем вы можете создать шаблон сайта «mytestsite» при помощи инструмента django-admin. После создания сайта вы можете перейти в папку, где найдете основной скрипт для управления проектами с именем manage.py.

django-admin startproject mytestsite
cd mytestsite

Мы можем запустить веб-сервер разработки из этой папки при помощи manage.py и команды runserver, как показано ниже.

$ python3 manage.py runserver 
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

September 19, 2016 - 23:31:14
Django version 1.10.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Замечание: Указанная команда демонстрирует выполнение для Linux/Mac OS X. В настоящий момент вы можете проигнорировать предупреждения о  «13 непримененных миграциях»!

Как только сервер запущен, вы можете посмотреть сайт, перейдя по следующему адресу в вашем браузере: http://127.0.0.1:8000/. Вы должны увидеть, что сайт выглядит следующим образом:

Заключение

Теперь у вас на компьютере установлена и запущена среда разработки Django.

В разделе проверки вам коротко был показан способ создания нового сайта на Django при помощи django-admin startproject и его запуск в вашем браузере при помощи веб-сервера разработки (python3 manage.py runserver). В следующей статье мы подробнее рассмотрим этот процесс создания простого, но полноценного веб-приложения.

В этом модуле

Django, начало работы с базой данных / Хабр

Знакомство с django, Работа с БД.

На Хабре существует много тем о django, с описанием различных вкусностей. Но мне не встречался пост, про начало пути, так сказать для новичка. Так что хочется написать короткое руководство начинающего бойца, по собственным шагам.

Cпасибо www.djbook.ru, русский перевод онлайн книги о django, именно отсюда я черпал данные для написания поста.

Далее по тексту я попытаюсь кратко описать общие сведения необходимые для работы с БД в django.


Начну с перечисления приложений с которыми я работал:

  1. python 2.6
  2. django 1.1.1
  3. postgreSQL 8.4.2
  4. python-psycopg2 2.0.8-0

здесь ссылка на то как установить django

Поскольку это описание собственного опыта, буду описывать всё по шагам, как делал я.

Первым шаг. Создание проекта

Для начала, нужно создать новый проект. Для этого нужно определиться с именем каталога проекта и местом его расположения. В выбранном каталоге выполним команду:
django-admin.py startproject hellowDjango


Данное действие приведёт к созданию шаблона нового проекта под названием hellowDjango. Подробнее о том, что происходит при выполнении команды можно прочитать здесь. Проект создан и пора переходить к следующему шагу.

Второй шаг, Настройка БД

Django может работать с множеством БД, но в данном примере я использую postgresql.

Я предполагаю, что БД у вас уже установлена и настроена. Если нет, то вот ссылка, которая помогла мне настроить мою БД на Ubuntu. Открываем файл настроек, settings.py находящийся в каталоге проекта hellowDjango, находим там такие строчки и модифицируем их до:
DATABASE_ENGINE = 'postgresql_psycopg2' #'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

DATABASE_NAME = myDBName # Or path to database file if using sqlite3.

DATABASE_USER = myUserDB # Not used with sqlite3.

DATABASE_PASSWORD = myUserDBPasswor # Not used with sqlite3.


На всякий случай поясню:

  • ‘postgresql_psycopg2’ — драйвер через который приложение будет выполнять запросы к БД и получать данные;
  • myDBName — название БД;
  • myUserDB — основной пользователь БД;
  • myUserDBPasswor — пароль основного пользователя.

Теперь необходимо проверить, что всё настроено правильно, для этого нужно выполнить команду в каталоге проекта:

python manage.py shell

Данная команда запустит интерпретатор python с настройками проекта. В интерпретаторе проверим подключение к БД.
>>> from django.db import connection

>>> cursor = connection.cursor()

В случае ошибки в настройках, появится сообщение которое поможет внести нужные исправления.

Третий шаг, Создание приложения.

Приложение в django — набор модели БД и представления хранящиеся в одном пакете python. Для того что бы, создать приложение, необходимо находясь в каталоге проекта выполнить команду:

python manage.py startapp MyName

Эта команда создаст директорию MyName, в каталоге проекта hellowDjango, а так же создаст файлы «заготовки» приложения в каталоге MyName.

Четвёртый шаг, Описание модели.

Модель БД в django — описание таблиц на языке python. Для создания модели приложения необходимо отредактировать файл MyName/models.py. В модели описывается много классов, каждый из которых будет описывать одну таблицу БД, а свойство класса — это один столбец таблицы. Класс должен быть унаследован от models.Model описанного в пакете django.db.models. Свойства класса должны иметь типы описанные в пакете django.db.models. Все типы данных и их применение описаны здесь.

Я в своих целях использовал следующие типы данных:

  1. models.DateTimeField() — поле содержащее в себе Дату и Время
  2. models.CharField(max_length= xx) — Текстовое поле ограниченной длины. Длина строки = xx символов
  3. models.BooleanField() — Поле содержащие в себе булево значение
  4. models.ForeignKey() — ссылка на внешнюю таблицу
  5. models.PositiveIntegerField() — положительное целое значение
  6. models.URLField(max_length=хх) — ссылка на web страницу длина ссылки ограничена xx символами
  7. models.DateField() — поле содержащие Дату

При создании модели данных у меня возникла проблема с внешними ключами. При ссылке на внешнюю таблицу которая описывалась ниже происходила ошибка. Перестановка таблиц решила данную проблему. Отмечу, что при создании внешних ключей, django добавляет к имени поля с внешним ключом постфикс _id.

Для проверки корректности созданной модели необходимо выполнить команду:
python manage.py validate

После того как модель прошла проверку, можно посмотреть как django предложит сгенерировать таблицы. Для этого выполним ещё одну команду:
python manage.py sqlall MyName

Для создания модели в БД, выполним следующую команду:
python manage.py syncdb

Пятый шаг. Работа с БД в интерпретаторе.

Ниже представлены варианты вставки данных в БД

Запускаем интерпретатор
python manage.py shell
>>> import MyName.models as mo # импортируем все модели проекта

>>> type = mo.ProductClass() # создаём экземпляр класса Типы Продуктов

>>> type.class_name = ‘сырьё’ # название типа

>>> type.save() # записываем экземпляр в БД

>>> type

&lt ProductClass: ProductClass object&gt

# так же можно воспользоваться вставкой данных другого вида

>>> mo.Dealer(organization_name = «ООО Рога И Копыта»).save() # создаст запись в таблице Dealer

>>> mo.Dealer.objects.all() # выполняем выборку данных из таблицы Dealer

[&lt Dealer: ООО Рога И Копыта&gt] # поскольку запись в таблице только 1 то и коллекция содержит всего 1 элемент, обратиться к нему можно через индексы.

# если для создания записи будет не хватать каких либо данных вы уведите протокол ошибки. Например такой:

>>> mo.Product(name = ‘овёс’, price = 50, product_class = type).save()

Traceback (most recent call last):



IntegrityError: null value in column «diler_id» violates not-null constraint

>>> mo.Product(name = ‘овёс’, price = 50, product_class = type, diler = mo.Dealer.objects.all()[0]).save() # вторая запись в таблице Product

Теперь нужно поговорить о выборе данных из таблиц.

# полная выборка из таблицы

>>> mo.Product.objects.all()

[&lt Product: мука&gt, &lt Product: овёс&gt, &lt Product: рожь&gt]

# выборка по полю name

>>> mo.Product.objects.filter(name = 'овёс')

[&lt Product: овёс&gt]

# выборка по частичному совпадению

>>> mo.Product.objects.filter(name__contains = 'о')

[&lt Product: овёс&gt, &lt Product: рожь&gt]

Мы рассмотрели вставку и выборку данных.

Давайте рассмотрим варианты обновления записей.

# для того что бы провести обновление записи необходимо выполнить следующие действия

>>> item2 = mo.Product.objects.get(name = 'овёс')

>>> item2.name = "овёс золотистый"

>>> item2.save()

Данный пример прост но имеет свой недостаток, он выполняет обновление всех полей записи, а не только тех которые изменились. Данный факт может привести к «гонке» пользователей, когда происходит массовое изменение данных в Таблице. Для решения такой проблемы правильно будет использовать метод update. Данный метод изменяет только указанные поля.
>>> mo.Product.objects.filter(id=3).update(name='oves')

1

>>> cole[2]

&lt Product: oves&gt

Последнее, что хочется описать, это удаление записей из БД.

Существует два способа удаления записей:

Первый удаление всех данных из таблицы
>>> cm.Dealer.objects.all()

[&lt Dealer: ООО Рога И Копыта&gt]

>>> cm.Dealer.objects.all().delete()

>>> cm.Dealer.objects.all()

[]


Второй удаление отобранных записей
>>> cm.ProductClass.objects.all()[0].id

1

>>> cm.ProductClass.objects.filter(id=1).delete()

>>> cm.ProductClass.objects.all()

[]


Более подробно о всех командах api работы с БД и можно почитать здесь.

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

Немного более развёнутую статью можно прочитать у меня в блоге

10 основных ошибок, совершаемых Django-разработчиками / Блог компании Mail.ru Group / Хабр

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

Django — бесплатный сетевой open source Python-фреймворк, помогающий решать распространённые в разработке проблемы. Он позволяет создавать гибкие, хорошо структурированные приложения. В Django уже из коробки есть много современных возможностей. Например, для меня такие фичи, как Admin, инструмент Object Relational Mapping (ORM), Routing и Templating, делают Django первым кандидатом при выборе инструментария для разработки. Создание приложения требует много сил, и, наслаждаясь своим делом, как и любой разработчик, я хочу тратить как можно меньше времени на рутинные задачи. Django сильно в этом помогает, не заставляя жертвовать гибкостью приложения.

Киллер-фича Django — мощный конфигурируемый админский интерфейс, который автоматически (автомагически?) генерируется на основе схемы вашей модели и моделей админки. Чувствуешь себя прямо-таки волшебником. С помощью интерфейса Admin пользователь может конфигурировать много вещей, в их числе — список управления доступом (access control list, ACL), разрешения и действия на уровне строк (row-level), фильтры, порядки сортировки (orders), виджеты, формы, дополнительные URL-хелперы и многое другое. Я считаю, что админка нужна каждому приложению. Это лишь вопрос времени, когда такая панель понадобится вашему основному приложению. В Django она создаётся быстро и удобно.

Также в Django есть мощная ORM, из коробки работающая со всеми главными базами данных. Она «ленива»: в отличие от других ORM, обращается к БД только по мере необходимости. В ней есть поддержка основных SQL-инструкций (и функций), которые вы можете использовать из своего исходного Python-кода наряду со всеми остальными возможностями языка.

В Django очень гибкий и мощный шаблонизатор (templating engine). Доступны многие стандартные фильтры и метки (tags), также можно создавать свои собственные. Django поддерживает другие движки как собственные шаблоны, предоставляет API для лёгкой интеграции с другими движками посредством стандартных shortcut-функций для обработки шаблонов.

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

Ошибка № 1. Использование для проектных зависимостей глобального окружения Python

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

Обычно такую ошибку допускают новички в Python- и Django-разработке, не знающие об особенностях изоляции окружения Python.

Есть много способов изолировать окружение, наиболее часто встречаются такие:

  • virtualenv: пакет Python, генерирующий папку с окружением. Содержит скрипт для (де)активации окружения и управления установленными в нём пакетами. Это мой любимый и самый простой метод. Обычно я создаю окружение поближе к папке проекта.
  • virtualenvwrapper: пакет Python, глобально устанавливающий набор инструментов для создания/удаления/активации и т. д. виртуальных окружений и предоставляющий доступ к этому набору. Все окружения хранятся в одной папке (её можно переписать с помощью переменной WORKON_HOME). Я не вижу преимуществ в использовании virtualenvwrapper вместо virtualenv.
  • Виртуальные машины: нет лучшей изоляции, чем целая виртуальная машина, выделенная под ваше приложение. Есть масса доступных инструментов, например VirtualBox (бесплатный), VMware, Parallels и Proxmox (мой фаворит, есть бесплатная версия). В сочетании с инструментом автоматизации виртуальных машин вроде Vagrant это может оказаться очень мощным решением.
  • Контейнеры: в последние годы я почти в каждом проекте использую Docker, особенно в новых проектах, начинаемых с нуля. Docker — невероятный инструмент с множеством возможностей. Для его автоматизации доступна куча сторонних инструментов. В Docker есть кеширование уровней (layer caching), позволяющее крайне быстро пересоздавать контейнеры. В них я использую глобальное окружение Python, потому что каждый контейнер имеет собственную файловую систему и проекты изолируются на высоком уровне. Docker позволяет новым членам команды быстрее начинать работу над проектом, особенно если у них есть опыт работы с этой технологией.

Ошибка № 2. Отсутствие привязки зависимостей в файле requirements.txt

Каждый новый проект Python должен начинаться с файла requirements.txt и нового изолированного окружения. Обычно вы с помощью pip/easy_install устанавливаете все пакеты, не забывая о requirements.txt. Обычно проще (возможно, правильнее) развёртывать проекты на серверах или на машинах членов команды.

Также важно в файле requirements.txt выполнять привязку (pin) конкретных версий ваших зависимостей. Обычно разные версии пакета предоставляют разные модули, функции и параметры функций. Даже в младших версиях изменения зависимостей могут оказаться такими, что это сломает ваш пакет. Это очень серьёзная проблема, если у вас живой проект и вы планируете регулярно его развёртывать, так как без системы управления версиями ваша сборочная система всегда будет устанавливать последнюю доступную версию пакета.

В production всегда выполняйте привязку пакетов! Я для этого использую очень хороший инструмент pip-tools. Он предоставляет набор команд, помогающих управлять зависимостями. Инструмент автоматически генерирует requirements.txt, в котором привязаны не просто ваши зависимости, а вообще всё дерево, т. е. и зависимости ваших зависимостей.

Иногда нужно обновить какие-то пакеты в списке зависимостей (например, только фреймворк или утилиту). Если вы прибегаете к pip freeze, то не знаете, какие зависимости используются какими пакетами, и поэтому не можете их обновить. Инструмент pip-tools автоматически привязывает пакеты в соответствии с привязанными вами зависимостями, и поэтому он автоматически решает, какие пакеты нужно обновить. А благодаря используемым комментариям в requirements.txt вы всегда знаете, какой пакет пришёл из какой зависимости.

Если быть ещё более осторожным, то можно делать бекап исходных файлов ваших зависимостей. Храните копию в своей файловой системе, Git-папке, S3-папке, FTP, SFTP — где угодно, лишь бы под рукой. Бывают ситуации, когда исключение из списка относительно небольшого пакета ломает большое количество пакетов в npm. Pip позволяет скачивать все необходимые зависимости в виде исходных файлов. Почитайте об этом подробнее, выполнив команду pip help download.

Ошибка № 3. Использование старомодных Python-функций вместо представлений-классов (Class-based Views)

Иногда целесообразно использовать в файле приложения views.py маленькие Python-функции, особенно для тестовых или утилитарных представлений. Но обычно в приложениях нужно использовать представления на основе классов (CBV).

CBV — это представления общего назначения, предоставляющие абстрактные классы, реализующие распространённые задачи веб-разработки. CBV созданы профессионалами и покрывают большинство востребованных моделей поведения. У них есть прекрасно структурированный API, и CBV подарят вам возможность наслаждаться всеми преимуществами ООП. Ваш код будет чище и читабельнее. Забудьте о трудностях использования стандартных функций представления (view functions) Django для создания списков, CRUD-операций, обработки форм и т. д. Можно просто расширять подходящий CBV под ваше представление и переопределять (override) функции или свойства класса, конфигурирующие поведение представления (обычно функция возвращает свойство, и вы можете добавить в неё любую логику, которая способна превратить ваш код в спагетти, если вместо CBV вы прибегнете к функциям представления).

Например, можно использовать в проекте разные миксины, которые переопределяют основные модели поведения CBV: создание контекстов представлений, проверка авторизации на уровне строк (on the row level), автосоздание путей шаблонов на основе структур приложения, интегрирование умного кеширования и многое другое.

Я создал пакет Django Template Names, который стандартизирует имена шаблонов для ваших представлений на основе имени приложения и имени класса представления. Я пользуюсь им каждый день и экономлю кучу времени при выборе имён. Просто вставьте миксин в свой CBV — class Detail(TemplateNames, DetailView): — и он начнёт работать! Конечно, можете переопределить мои функции и добавить мобильные адаптивные шаблоны, другие шаблоны для user-agent’ов или что-нибудь ещё.

Ошибка № 4. Написание «толстых» (fat) представлений и «тонких» (skinny) моделей

Если у вас логика приложения перенесена из модели в представления, это означает, что в представлениях находится код, принадлежащий модели. То есть представления становятся «толстыми», а модель — «тонкой».

А нужно писать «толстые» модели и «тонкие» представления.

Разбейте логику по маленьким методам в модели. Это позволит использовать их многократно и из многочисленных источников (админский пользовательский интерфейс, пользовательский интерфейс фронтенда, конечные точки API, многочисленные представления). Это займёт всего несколько строк кода, и вам не придётся копипастить кучу строк. Когда в следующий раз будете писать функциональность отправки письма пользователю, расширьте модель с помощью email-функции, а не пишите логику в контроллере.

Это сделает ваш код более удобным для модульного тестирования, потому что вы сможете протестировать логику электронной почты в одном месте, а не делать это в каждом контроллере. Подробнее об этой проблеме почитайте в Django Best Practices. Решение простое: пишите «толстые» модели и «тонкие» представления. Начните это делать уже в следующем проекте или рефакторьте текущий.

Ошибка № 5. Огромный, неповоротливый файл настроек

Даже в новом файле настроек Django-проекта этих настроек содержится множество. А в реальных проектах файл разрастается до 700+ строк, которые трудно сопровождать, особенно когда окружениям разработки, продакшена и стейджинга нужны разные конфигурации.

Вы можете вручную разделить конфигурационный файл и создать отдельные загрузчики, но я хочу порекомендовать отличный, хорошо протестированный Python-пакет Django Split Settings, соавтором которого я являюсь.

Пакет предоставляет две функции — optional и include, которые поддерживают подстановки (wildcards) для путей и импортируют ваши конфигурационные файлы в тот же контекст. Благодаря этому можно просто создавать конфигурации с помощью объявления конфигурационных записей в ранее загруженных файлах. Пакет никак не влияет на производительность Django и может применяться в любых проектах.

Вот пример минимальной конфигурации:

from split_settings.tools import optional, include

include(
    'components/base.py',
    'components/database.py',
    'components/*.py',

    # the project different envs settings
    optional('envs/devel/*.py'),
    optional('envs/production/*.py'),
    optional('envs/staging/*.py'),

    # for any local settings
    optional(‘local_settings.py'),
)

Ошибка № 6. Приложение всё-в-одном, плохая структура приложения и некорректное размещение ресурсов

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

Django-приложения могут содержать Python-модули, характерные для Django модули (представления, URL’ы, модели, админскую панель, формы, метки шаблонов и т. д.), статичные файлы, шаблоны, миграции базы данных, команды управления, модульные тесты и пр. Нужно разбивать своё монолитное приложение на маленькие многократно используемые приложения с простой логикой.

У вас должна быть возможность полностью описать назначение приложения одним-двумя короткими предложениями. Например: «Позволяет пользователю зарегистрировать и активировать по почте свой аккаунт».

Рекомендуется назвать папку проекта project и положить приложения в project/apps/. Затем положить все зависимости приложений в собственные подпапки.

Примеры:

  • Статичные файлы: project/apps/appname/static/appname/
  • Метки шаблона: project/apps/appname/templatetags/appname.py
  • Файлы шаблона: project/apps/appname/templates/appname/

Всегда добавляйте имена приложений в виде префиксов в названия подпапок, потому что все статические папки объединяются в одну. И если два или более приложений имеют файл js/core.js, то последнее приложение в settings.INSTALLED_APPLICATIONS переопределит все предыдущие. Однажды я столкнулся с таким багом в своём проекте и потратил около шести часов на отладку, пока не сообразил, что другой разработчик переопределил мой static/admin/js/core.js, потому члены команды реализовали кастомную админскую SPA-панель и дали своим файлам такие же имена.

Вот пример структуры для портального приложения, содержащего много ресурсов и Python-модулей.

[email protected]:/test# tree project/apps/portal/
project/apps/portal/
├── __init__.py
├── admin.py
├── apps.py
├── management
│   ├── __init__.py
│   └── commands
│       ├── __init__.py
│       └── update_portal_feeds.py
├── migrations
│   └── __init__.py
├── models.py
├── static
│   └── portal
│       ├── css
│       ├── img
│       └── js
├── templates
│   └── portal
│       └── index.html
├── templatetags
│   ├── __init__.py
│   └── portal.py
├── tests.py
├── urls.py
└── views.py

11 directories, 14 files

Благодаря такой структуре вы можете в любой момент экспортировать приложение в другой Python-пакет и снова его использовать. Можете даже опубликовать его в PyPi в качестве open source пакета или переместить в другую папку. У вас получится примерно такая структура проекта:

[email protected]:/test# tree -L 3
.
├── deploy
│   ├── chef
│   └── docker
│       ├── devel
│       └── production
├── docs
├── logs
├── manage.py
├── media
├── project
│   ├── __init__.py
│   ├── apps
│   │   ├── auth
│   │   ├── blog
│   │   ├── faq
│   │   ├── pages
│   │   ├── portal
│   │   └── users
│   ├── conf
│   ├── settings.py
│   ├── static
│   ├── templates
│   ├── urls.py
│   └── wsgi.py
└── static
    └── admin
        ├── css
        ├── fonts
        ├── img
        └── js

25 directories, 5 files

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

Ошибка № 7. STATICFILES_DIRS и STATIC_ROOT смущают новичков в Django-разработке

Статичные файлы — это ресурсы (assets), которые не меняются по мере использования приложения. Например, JavaScript, CSS, изображения, шрифты и т. д. В Django они «накапливаются» в публичной директории в ходе развёртывания.

В режиме разработки — python manage.py runserver — Django ищет статичные файлы с помощью настройки STATICFILES_FINDERS. По умолчанию он пытается найти запрошенный файл в папках, перечисленных в STATICFILES_DIRS. Если не находит, то ищет с помощью django.contrib.staticfiles.finders.AppDirectoriesFinder, которая проверяет папку static каждого установленного в проекте приложения. Такая схема позволяет писать многократно используемые приложения, поставляемые со своими собственными статичными файлами.

В production вы раздаёте статичные данные посредством отдельного веб-сервера, например nginx. Он ничего не знает о структуре приложений проекта Django или о том, по каким папкам распределены ваши статичные файлы. К счастью, Django предоставляет нам команду управления сбором статичных данных (collect static management command) — python manage.py collectstatic, которая проходит по STATICFILES_FINDERS и копирует все статичные файлы из папок static приложений, а также из папок, перечисленных в STATICFILES_DIRS, в заданную вами в STATIC_ROOT директорию. Это позволяет разрешать (resolution) ресурсы в виде статичных данных с помощью той же логики, что и у Django-сервера в режиме разработки, и собирать в одном месте для веб-сервера все статичные файлы.

Не забудьте выполнить collectstatic в вашем production-окружении!

Ошибка № 8. Использование в production STATICFILES_STORAGE по умолчанию и загрузчиков Django-шаблонов

Давайте поговорим об управлении ресурсами (asset) production-окружения. Мы можем обеспечить наилучший UX, если воспользуемся политикой «у ресурсов не истекает срок действия» (assets never expire) (подробнее о ней можно почитать здесь). Это означает, что все наши статичные файлы должны быть закешированы браузерами на недели, месяцы или даже годы. Иными словами, пользователи должны лишь единожды скачивать ресурсы!

Классная идея, и её можно реализовать всего в несколько строк в nginx-конфигурации для нашей папки со статичными файлами. Но что насчёт проверки актуальности кеша? Если пользователь лишь один раз скачивает наш ресурс, то что делать в том случае, если вы обновите логотип, шрифты, JavaScript или цвет текста в меню? Для решения этой задачи вам нужно при каждом развёртывании генерировать уникальные URL’ы и имена для каждого статичного файла!

Для этого можно использовать ManifestStaticFilesStorage в качестве STATICFILES_STORAGE (будьте осторожны, хеширование включается только в режиме DEBUG=false) и выполнить команду collectstatic. Это приведёт к снижению количества запросов ресурсов у вашего production-сайта и сделает его отрисовку гораздо быстрее.

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

В разделе конфигурации cached.Loader можно найти хороший пример и подробности решения проблемы. Не используйте загрузчик в режиме разработки, потому что он не перезагружает отпарсенные шаблоны из файловой системы. Вам понадобится перезапускать свой проект, используя python manage.py startapp, при каждом изменении шаблона. При разработке это может раздражать, зато идеально для production-окружения.

Ошибка № 9. Чистый Python для утилит или скриптов

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

Также обратите внимание на пакет Django Extensions, представляющий собой коллекцию кастомных расширений для Django. Возможно, кто-то уже реализовал ваши команды! Существует много распространённых целевых команд.

Ошибка № 10. Велосипедостроение

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

Не надо усложнять. Сначала — гуглим! Установите найденный качественный пакет, сконфигурируйте, расширьте и интегрируйте в свой проект. И если есть возможность, внесите свой вклад в open source.

Вот вам для начала список моих собственных пакетов для Django:

  • Django Macros URL: с помощью макросов облегчает написание (и чтение) URL-паттернов в Django-приложениях.
  • Django Templates Names: маленький миксин, помогает легко стандартизировать имена ваших CBV-шаблонов.
  • Django Split Settings: позволяет распределить Django-настройки по нескольким файлам и директориям. Легко переопределяет и модифицирует настройки. Использует подстановки (wildcards) в путях файлов и помечает файлы настроек как опциональные.

Don’t repeat yourself (DRY)!

Я сторонник DRY-концепции, поэтому создал Django skeleton — удобный инструмент с рядом приятных функций уже из коробки:

  • Docker-образы для разработки/production, управляемые docker-compose, что позволяет легко оркестрировать списком контейнеров.
  • Простой Fabric-скрипт для развёртывания в production.
  • Конфигурация для пакета Django Split Settings с настройками базы и локальных источников.
  • Интегрированный в проект Webpack — при выполнении команды collectstatic Django соберёт только папку dist.
  • Сконфигурированы все основные Django-настройки и фичи вроде кешируемых в production Django-шаблонов, хешированных статичных файлов, интегрированного тулбара для отладки, журналирования и т. д.

Это готовый к использованию Django-скелет для вашего следующего проекта, создаваемого с нуля. Надеюсь, он сэкономит вам кучу времени. Webpack имеет минимальную базовую конфигурацию, но также в него с помощью SASS установлены заранее сконфигурированные для обработки файлы .scss.

Скачать Django | Джанго

Django доступен с открытым исходным кодом под
Лицензия BSD.
Мы рекомендуем использовать последнюю версию Python 3. Последняя версия для
поддержка Python 2.7 — это Django 1.11 LTS. Видеть
FAQ по версиям Python, поддерживаемым каждой версией Django.
Вот как это получить:

Вариант 1. Получите последнюю официальную версию

Последняя официальная версия — 3.1. Прочтите
Примечания к выпуску 3.1, затем установите его с помощью
пункт:

  pip install Django == 3.1  

Вариант 2. Получите последнюю версию для разработчиков

Самая последняя и самая лучшая версия Django находится в нашем репозитории Git (наша система контроля версий). Это только для опытных пользователей, которые хотят опробовать входящие изменения и помочь выявить ошибки до официального выпуска. Получите его с помощью этой команды оболочки, для которой требуется Git:

git clone https://github.com/django/django.git

Вы также можете скачать
сжатый архив с разработанной версией.Этот архив обновляется
каждый раз, когда мы фиксируем код.

После получения

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

И не забудьте подписаться на список рассылки django-users, где другие пользователи Django и сами разработчики Django тусуются, чтобы помочь друг другу.

Поддерживаемые версии

Выпуски функций (A.B, A.B + 1 и т. Д.) Будут происходить примерно каждые восемь месяцев.
Эти выпуски будут содержать новые функции, улучшения существующих функций и т. Д.

Патч-релизы (A.B.C и т. Д.) Будут выпущены по мере необходимости для
исправить ошибки и / или проблемы с безопасностью. Эти выпуски будут на 100% совместимы с
связанный выпуск функции, если это невозможно по соображениям безопасности
причин или для предотвращения потери данных. Итак, ответ на вопрос «стоит ли мне перейти на
последний выпуск патча? » всегда будет «да».«

Определенные выпуски функций будут обозначены как долгосрочная поддержка
(LTS) выпускает
. Эти выпуски получат безопасность и потерю данных
исправления применяются в течение гарантированного периода времени, обычно три года.

Посмотреть
Политика поддерживаемых версий содержит подробные инструкции о том, какие исправления будут перенесены.


Выпуск серии Последняя версия Окончание основной поддержки 1 Окончание расширенной поддержки 2
3.1 3,1 Апрель 2021 г. Декабрь 2021 г.
3,0 3.0.9 Август, 2020 Апрель 2021 г.
2,2 ЛТС 2.2.15 2 декабря 2019 г. Апрель 2022 г.
2,1 2.1.15 1 апреля 2019 г. 2 декабря 2019 г.
2.0 2.0.13 1 августа 2018 г. 1 апреля 2019 г.
1,11 ЛТС 3 1.11.29 2 декабря 2017 г. 1 апреля 2020 г.
1,10 1.10.8 4 апреля 2017 г. 2 декабря 2017 г.
1,9 1.9.13 1 августа 2016 г. 4 апреля 2017 г.
1.8 ЛТС 1.8.19 1 декабря 2015 г. 1 апреля 2018 г.
1,7 1.7.11 1 апреля 2015 г. 1 декабря 2015 г.
1,6 1.6.11 2 сентября 2014 г. 1 апреля 2015 г.
1,5 1.5.12 6 ноября 2013 г. 2 сентября 2014 г.
1.4 LTS 1.4.22 26 февраля 2013 г. 1 октября 2015 г.
1,3 1,3,7 23 марта 2012 г. 26 февраля 2013 г.

Вот как выглядит будущая дорожная карта:

Выпуск серии Дата выпуска Окончание основной поддержки 1 Окончание расширенной поддержки 2
3.2 LTS Апрель 2021 г. Декабрь 2021 г. Апрель 2024 г.
4,0 Декабрь 2021 г. Август 2022 г. Апрель 2023 г.
4,1 Август 2022 г. Апрель 2023 г. Декабрь 2023 г.
4,2 ЛТС Апрель 2023 г. Декабрь 2023 г. Апрель 2026 г.

[1] Исправления безопасности, ошибки потери данных, ошибки сбоя, основные функции
ошибки во вновь представленных функциях и регрессии из старых версий Django.

[2] Исправления безопасности и ошибки потери данных.
[3] Последняя версия для поддержки Python 2.7.

Вернуться к началу
,

Написание вашего первого приложения Django, часть 1 | Документация Django

Давайте узнаем на примере.

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

Предположим, у вас уже установлен Django. Ты можешь
Сообщите Django и его версию, выполнив следующую команду:

Если Django установлен, вы должны увидеть версию вашей установки. Если это
нет, вы получите сообщение «Нет модуля с именем django».

Это руководство написано для Django 1.8 и Python 3.2 или новее. Если
Версия Django не совпадает, вы можете обратиться к руководству по вашей версии
Django с помощью переключателя версий в правом нижнем углу этого
страницу или обновите Django до последней версии. Если вы все еще используете Python
2.7 вам нужно будет немного изменить образцы кода, как описано в
Комментарии.

См. Как установить Django, чтобы узнать, как удалить
старые версии Django и установите более новую.

Создание проекта¶

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

Из командной строки введите cd в каталог, в котором вы хотите сохранить
code, затем выполните следующую команду:

 $ django-admin startproject mysite
 

Это создаст каталог mysite в вашем текущем каталоге.Если бы не
работы, см. Проблемы с запуском django-admin.

Примечание

Вам следует избегать именования проектов после встроенного Python или Django.
составные части. В частности, это означает, что вам следует избегать использования таких имен, как
django (который будет конфликтовать с самим Django) или test (который
конфликтует со встроенным пакетом Python).

Где должен находиться этот код?

Если вы используете старый добрый PHP (без использования современных фреймворков),
вы, вероятно, привыкли помещать код в корневой каталог документов веб-сервера
(в таком месте, как / var / www ).С Django этого не сделать. Это
не лучшая идея помещать какой-либо из этого кода Python в ваш веб-сервер
корень документа, потому что это рискует, что люди смогут
чтобы просмотреть свой код в Интернете. Это плохо для безопасности.

Поместите свой код в какой-нибудь каталог за пределами корня документа, например
/ главная / мойкод .

Давайте посмотрим, что создал startproject :

 mysite /
    manage.py
    мой сайт/
        __в этом__.ру
        settings.py
        urls.py
        wsgi.py
 

Это файлы:

  • Внешний корневой каталог mysite / — это просто контейнер для вашего
    проект. Его имя не имеет значения для Django; вы можете переименовать его во что угодно
    тебе нравится.
  • manage.py : утилита командной строки, которая позволяет вам взаимодействовать с этим
    Проект Django разными способами. Вы можете прочитать все подробности о
    manage.py в django-admin и manage.py.
  • Внутренний каталог mysite / — это фактический пакет Python для вашего
    проект.Его имя — это имя пакета Python, который нужно использовать для импорта.
    что-нибудь внутри него (например, mysite.urls ).
  • mysite / __ init__.py : пустой файл, который сообщает Python, что это
    каталог следует рассматривать как пакет Python. (Подробнее о
    пакетов в официальной документации Python, если вы новичок в Python.)
  • mysite / settings.py : Настройки / конфигурация для этого Django
    проект. Настройки Django расскажут вам все о том, как настройки
    работай.
  • mysite / urls.py : объявления URL для этого проекта Django;
    «Оглавление» вашего сайта на Django. Вы можете узнать больше о
    URL-адреса в диспетчере URL-адресов.
  • mysite / wsgi.py : точка входа для WSGI-совместимых веб-серверов в
    служить вашему проекту. Дополнительные сведения см. В разделе «Как развернуть с помощью WSGI».

Настройка базы данных¶

Теперь откройте mysite / settings.py . Это обычный модуль Python с
переменные уровня модуля, представляющие настройки Django.

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

Если вы хотите использовать другую базу данных, установите соответствующую базу данных
привязки и измените следующие ключи в
БАЗЫ ДАННЫХ 'default' элемент, соответствующий вашему подключению к базе данных
настройки:

  • ДВИГАТЕЛЬ -Либо
    'джанго.db.backends.sqlite3 ',
    'django.db.backends.postgresql_psycopg2' ,
    'django.db.backends.mysql' , или
    'django.db.backends.oracle' . Также доступны другие бэкенды.
  • ИМЯ — Имя вашей базы данных. Если вы используете SQLite,
    база данных будет файлом на вашем компьютере; в этом случае ИМЯ
    должен быть полным абсолютным путем, включая имя файла, этого файла.
    значение по умолчанию, os.path.join (BASE_DIR, 'db.sqlite3') , сохранит файл
    в каталоге вашего проекта.

Если вы не используете SQLite в качестве базы данных, необходимо добавить дополнительные настройки, такие как ПОЛЬЗОВАТЕЛЬ , ПАРОЛЬ , HOST .
Для получения дополнительных сведений см. Справочную документацию для БАЗЫ ДАННЫХ .

Примечание

Если вы используете PostgreSQL или MySQL, убедитесь, что вы создали базу данных
эта точка. Сделайте это с помощью « CREATE DATABASE имя_базы_данных; ”в пределах вашего
интерактивная подсказка базы данных.

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

Пока вы редактируете м

.

Создайте приложение для портфолио — настоящий Python

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

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

По окончании этого руководства вы сможете:

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

Почему вы должны изучать Django

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

Примечание: Этот учебник предполагает знание языка Python на среднем уровне. Если вы новичок в программировании на Python, ознакомьтесь с некоторыми из наших руководств для начинающих или вводного курса.

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

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

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

Одна из замечательных особенностей Django framework — это подробная документация. В нем есть подробная документация по каждому аспекту Django, а также отличные примеры и даже учебное пособие для начала.

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

Django — это высокоуровневый фреймворк для веб-приложений с множеством функций. Он отлично подходит для всех, кто плохо знаком с веб-разработкой, благодаря фантастической документации, особенно если вы также знакомы с Python.

Структура веб-сайта Django

Веб-сайт Django состоит из одного проекта , который разделен на отдельных приложений .Идея состоит в том, что каждое приложение выполняет автономную функцию, которую должен выполнять сайт. В качестве примера представьте себе такое приложение, как Instagram. Необходимо выполнить несколько различных функций:

  • Управление пользователями : вход, выход, регистрация и т. Д.
  • Канал изображений : загрузка, редактирование и отображение изображений
  • Личные сообщения : Личные сообщения между пользователями и уведомления

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

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

.

Написание вашего первого приложения Django, часть 5 | Документация Django

Что такое автоматизированные тесты? ¶

Тесты — это процедуры, которые проверяют работу вашего кода.

Тестирование работает на разных уровнях. Некоторые тесты могут относиться к крошечной детали
( возвращает ли определенный метод модели ожидаемые значения? ), а другие
проверить общую работу программного обеспечения ( выполняет последовательность пользовательских вводов
на сайте производите желаемый результат?
). Это ничем не отличается от
тестирование, которое вы выполнили ранее в Уроке 2, используя
оболочка для проверки поведения метода или запуска
приложение и ввод данных, чтобы проверить, как оно себя ведет.

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

Зачем нужно создавать тесты¶

Так зачем создавать тесты и почему именно сейчас?

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

Тесты сэкономят ваше время¶

До определенного момента «проверка работоспособности» будет удовлетворительной
тест.В более сложном приложении у вас могут быть десятки сложных
взаимодействия между компонентами.

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

Это особенно верно, когда автоматические тесты могут сделать это за вас за секунды.Если что-то пошло не так, тесты также помогут определить код.
это вызывает неожиданное поведение.

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

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

Тесты не просто выявляют проблемы, они их предотвращают¶

Ошибочно думать о тестах как о негативном аспекте разработки.

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

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

Тесты делают ваш код более привлекательным¶

Вы могли бы создать блестящую программу, но вы обнаружите, что
многие другие разработчики откажутся смотреть на него из-за отсутствия тестов; без
тесты, они ему не поверят. Джейкоб Каплан-Мосс, один из оригиналов Джанго
разработчиков, говорит: «Код без тестов нарушен по замыслу».

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

Тесты помогают командам работать вместе¶

Предыдущие пункты написаны с точки зрения одного разработчика.
ведение приложения. Сложные приложения будут обслуживаться командами.
Тесты гарантируют, что коллеги случайно не сломают ваш код (и что
вы не сломаете их, не зная). Если вы хотите зарабатывать на жизнь
Программист Django, вы должны уметь писать тесты!

,

Leave a Comment

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