Django что такое
Django что такое
Django Overview
Django was invented to meet fast-moving newsroom deadlines, while satisfying the tough requirements of experienced web developers.
Why Django?
With Django, you can take web applications from concept to launch in a matter of hours. Django takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.
Django was designed to help developers take applications from concept to completion as quickly as possible.
Django includes dozens of extras you can use to handle common web development tasks. Django takes care of user authentication, content administration, site maps, RSS feeds, and many more tasks — right out of the box.
Django takes security seriously and helps developers avoid many common security mistakes, such as SQL injection, cross-site scripting, cross-site request forgery and clickjacking. Its user authentication system provides a secure way to manage user accounts and passwords.
Some of the busiest sites on the planet use Django’s ability to quickly and flexibly scale to meet the heaviest traffic demands.
Companies, organizations and governments have used Django to build all sorts of things — from content management systems to social networks to scientific computing platforms.
Django
Django makes it easier to build better web apps more quickly and with less code.
Meet Django
Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.
Django was designed to help developers take applications from concept to completion as quickly as possible.
Django takes security seriously and helps developers avoid many common security mistakes.
Some of the busiest sites on the web leverage Django’s ability to quickly and flexibly scale.
Stay in the loop
Subscribe to one of our mailing lists to stay up to date with everything in the Django community:
Using Django
Get help with Django and follow announcements.
You can also subscribe by sending an email to django-users+subscribe@googlegroups.com and following the instructions that will be sent to you.
Contributing to Django
Contribute to the development of Django itself.
Before asking a question about how to contribute, read Contributing to Django. Many frequently asked questions are answered there.
You can also subscribe by sending an email to django-developers+subscribe@googlegroups.com and following the instructions that will be sent to you.
Support Django!
Latest news
Django 4.1 released
Django 4.1 has been released!
Posted by Carlton Gibson on Август 3, 2022
Django security releases issued: 4.0.7 and 3.2.15
Django 4.0.7 and 3.2.15 fix one security issue.
Posted by Carlton Gibson on Август 3, 2022
More news
Что такое Django?
Django (/ˈdʒæŋɡoʊ/ джанго) — бесплатный и свободный фреймворк для веб-приложений, написанный на Python. Фреймворк — это набор компонентов, которые помогают разрабатывать веб-сайты быстро и просто.
Каждый раз при разработке веб-сайтов требуются похожие компоненты: способ аутентифицировать пользователей (вход, выход, регистрация), панель управления сайтом, формы, инструменты для загрузки файлов и т. д.
К счастью для нас, другие люди обратили внимание на возникновение однотипных проблем при веб-разработке, так что они объединились и создали фреймворки (Django и другие), которые предлагают нам готовые шаблоны для использования.
Фреймворки существуют, чтобы облегчить процесс разработки и позволить нам не изобретать колесо.
Зачем нам нужен фреймворк?
Чтобы понять, для чего же нам нужен Django, нам нужно ближе познакомиться с серверами. Во-первых, сервер должен узнать о том, что мы ждём от него веб-страницу.
Представь себе почтовый ящик (порт), который проверяется на наличие новых писем (запросов). Это делает веб-сервер. Когда письмо приходит, сервер читает его и отправляет ответ с веб-страничкой. Однако чтобы что-то отправить, нам надо это что-то иметь. И Django как раз и отвечает за создание контента, который будет отправлен в ответе.
Что происходит, когда кто-то запрашивает веб-сайт у твоего сервера?
Когда на сервер приходит запрос, он переадресуется Django, который пытается сообразить, что же конкретно от него просят. Для начала он берет адрес веб-страницы и пробует понять — что же нужно сделать. Эту часть процесса в Django выполняет urlresolver (адрес веб-сайта называется URL — Uniform Resource Locator — Единый указатель ресурсов, так что название urlresolver, resolver == распознаватель, имеет определенный смысл). Он не слишком умён, поэтому просто берет список шаблонов и пытается сопоставить их с URL. Django сверяет шаблоны сверху вниз и, если что-то совпадает, он перенаправляет запрос соответствующей функции (которая называется view).
Представь себе почтальона с письмом. Она идет вниз по улице и сверяет номера домов с адресом на письме. Если они совпадают, то она оставляет письмо. Так же работает и urlresolver!
Но самые интересные вещи происходят в функции view: мы, например, можем обращаться к базе данных за определенной информацией. Может быть, пользователь попросил изменить какую-нибудь информацию? Как будто в письме написано: «Пожалуйста, поменяйте описание моей работы.» Функция view может проверить, имеете ли вы разрешение делать это, а затем обновит описание работы и отправит обратно ответ: «Готово!». Затем функция view сгенерирует ответ, и Django сможет отправить его веб-браузеру пользователя.
В реальности все немного сложнее, однако тебе не обязательно знать все технические навороты прямо сейчас. Достаточно основной концепции.
Так что вместо погружения в пучины нюансов мы просто начнем работать с Django и познакомимся со всеми важными особенностями по мере продвижения!
Django
Django («Джанго») — это свободный фреймворк для разработки быстрых и безопасных веб-приложений и сайтов на языке Python. Использует шаблон проектирования MVC.
Django создали в 2003–2005 годах веб-программисты онлайн-версии Lawrence Journal-World Адриан Головати и Саймон Уиллисон. Фреймворк назван в честь французского гитариста-виртуоза Джанго Рейнхардта (Рана Ренара). Первая версия опубликована в 2005 году. С тех пор фреймворк обновляется 1–2 раза в год. С 2008 года поддержкой и развитием занимается организация Django Software Foundation (DSF).
Как работает Django
Как и любой другой фреймворк, «Джанго» — это программная платформа (каркас), на который разработчик «навешивает» дополнительные компоненты приложения, например:
Фреймворк отвечает за базовые аспекты работы продукта. А подключаемые (сменные) модули — за специфичные функции конкретного приложения.
Использование фреймворков позволяет:
Способ организации кода «Модель–представление–контроллер» (MVC)
Контроллер классической модели MVC примерно соответствует уровню, который в Django называется представлением (англ. View), а презентационная логика представления реализуется в Django уровнем шаблонов (англ. Template). Поэтому архитектуру Django часто называют «Модель–шаблон–представление» (MTV):
Принцип повторяет концепцию MVC, поэтому Django относится к MVC-совместимым платформам.
Концепция DRY (Don’t repeat yourself — «Не повторяйся»)
Для реализации аналогичных или схожих задач используются одни и те же элементы кода, а не пишутся каждый раз новые. Благодаря этому отсутствует дублирование, усложняющее и увеличивающее размер приложения, и упрощаются разработка и поддержка программного продукта.
Использование независимых (отчуждаемых и подключаемых) компонентов
Разработчик может модифицировать конкретный модуль без внесения изменения в другие. При этом итоговый программный продукт останется функциональным.
Структура Django
Базовая структура фреймворка включает следующие компоненты:
Примерная схема работы приложения на Django:
В структуру Django входят узкоспециализированные модули и функции, в том числе:
Благодаря открытому коду функционал Django можно расширить за счет внешних программных пакетов. Их перечень и описание возможностей публикуются на сайте www.djangopackages.com.
Преимущества Django
Полнота
Фреймворк Django спроектирован по принципу «Все включено». Разработчик может с его помощью создать веб-приложение без сторонних компонентов. Это полезно для начинающих программистов, так как им не приходится отвлекаться на поиск дополнительных инструментов для решения типовых задач.
Универсальность
Django подходит для разработки веб-сайтов и приложений любого типа: систем управления контентом, новостных или информационных ресурсов, видеохостингов, социальных сетей и т.д. Он может работать с любыми типами файлов, различными базами данных, клиентскими средами. Если в «коробочной» версии фреймворка нет компонента для реализации конкретного продукта, его можно получить из сторонних источников.
Надежность
Django поддерживается и развивается Django Software Foundation, а также сообществом сторонних разработчиков. Фреймворк обновляется и совершенствуется, проверяется на ошибки. Созданные приложения стабильные и содержат меньше багов по сравнению с разработанными на других фреймворках, CRM или написанными с нуля.
Масштабируемость
Архитектура Django строится на независимости составляющих частей. Любой компонент можно заменить или модифицировать, не затрагивая другие. Возможности Django позволяют как разрабатывать приложения, так и расширять их при увеличении трафика и нагрузки.
Сопровождаемость
Django позволяет повторно использовать код, группировать связанные функции в отдельные модули. Это облегчает, сокращает и упрощает структуру приложения. Если у проекта сменился разработчик, он сможет быстро разобраться в архитектуре ПО и обеспечить качественную поддержку.
Безопасность
У Django есть встроенные инструменты защиты от распространенных хакерских атак. Также он позволяет эффективно распределять доступ к данным среди пользователей разного уровня. Это повышает безопасность продукта и стабильность его работы.
Переносимость
Язык программирования Django — Python, адаптированный ко всем распространенным платформам. Разработанные на фреймворке приложения одинаково хорошо работают на Windows, Mac OS X и Linux-based операционных системах, а также их версиях. Django поддерживают веб-хостинги с подходящей инфраструктурой и документацией.
Открытость
Django — открытое ПО, поэтому любой желающий может использовать его для создания приложения или сайта, в том числе для коммерческого использования.
Обширная экосистема
Для Django существует большое количество сторонних подключаемых модулей, различных инструкций, лайфхаков и т.д. Официальный разработчик также предоставляет обширную документацию, упрощающую работу с Django.
Гибкость
«Джанго» — «умеренно гибкий» фреймворк. Он предоставляет несколько инструментов для решения одной задачи и 1–2 подхода к их использованию. То есть разработчик может выбирать между различными опциями и одновременно не теряться в их многообразии.
Недостатки Django
Монолитная архитектура
«Джанго» развивается как единый и самодостаточный комплекс инструментов разработчика. Это позволяет реализовывать даже крупные проекты, не обращаясь к сторонним приложениям и сервисам, но и тормозит развитие самого фреймворка. Разработчикам приходится тратить силы на все инструменты, входящие в его ядро.
Устаревший ORM
У Django есть свой менеджер базы данных, которая позволяет работать с различными типами БД. Однако у нее отсутствуют некоторые полезные функции, которые есть в других ORM и активно используются разработчиками. Основной недостаток — отсутствие интеграции с SQLAlchemy, являющейся основным инструментом работы с базами данных на языке Python.
Отсутствие многозадачности
«Джанго» не позволяет отдельным процессам работать с несколькими запросами одновременно. Несмотря на то что разработчики пытаются решить проблему, им приходится использовать различные подходы.
Шаблон маршрутизации URL
Основан на использовании регулярных выражений (символов и метасимволов), задающих правила поиска. Механизм исправно работает, однако его настройка вызывает затруднения у новичков, повышая порог вхождения.
Установка Django
Процесс различается в зависимости от версии фреймворка, а также аппаратной платформы и установленной операционной системы. Рассмотрим рекомендуемый способ установки Django на персональный компьютер под управлением ОС Windows.
Подготовка
Установка виртуальной среды
Этот этап не обязательный, но упрощающий программисту работу с Django. С помощью виртуальной среды можно запускать несколько приложений на Python независимо друг от друга. Например, если ранее был уже разработан один проект на старой версии Django, то при появлении обновленного фреймворка можно создать второй проект, не затрагивая первый. Это позволит пользоваться всеми преимуществами новой версии «Джанго», не тратя время на обновление предыдущей. Для использования виртуальной среды ее нужно предварительно активировать с помощью файла activate.bat. Это нужно делать каждый раз при работе с проектом на Django. После окончания работы виртуальную среду нужно деактивировать с помощью файла deactivate.bat.
Установка Django
После установки и активации виртуальной среды можно инсталлировать фреймворк. Для этого нужно ввести в консоль команду pip install Django. Система сама найдет, скачает и установит свежую версию фреймворка для конкретной программной и аппаратной платформы.
Настройка проекта на Django
Чтобы создать проект на Django, нужно предварительно задать специальную директорию на жестком диске, например C:\django. Далее необходимо перейти в командной строке в этот каталог, используя команду cd.
После установки Django в папке виртуальной среды появляется скрипт django-admin.py, а в ОС Windows — исполняемый файл django-admin.exe. На Windows их можно найти в подкаталоге Scripts. Скрипт django-admin включает несколько команд для управления проектом. Например, для его создания используется директива startproject. Далее работа с проектом строится по следующему алгоритму:
Проект включает следующие элементы:
Чтобы запустить выполнение проекта, нужно перейти в консоли к его папке и задействовать команду python manage.py runserver. После этого в командной строке отобразится адрес, на котором будет размещен проект, — как правило, http://127.0.0.1:8000/. Если ввести его в поисковую строку любого браузера, откроется содержимое по умолчанию. По сути, это уже работающий проект со стандартным базовым контентом. Дальнейшая работа будет заключаться в том, чтобы заменить содержимое на свое веб-приложение.
Когда применять и не применять Django
«Джанго» разработали программисты новостных сайтов. Это во многом определило специфику архитектуры. Фреймворк идеально подходит для создания информационных порталов, онлайн-версий печатных журналов или других цифровых СМИ. Сегодня с его помощью разрабатываются социальные сети, видеохостинги, музыкальные сервисы, поисковики и т.д. Веб-фреймворк Django используется в сайтах:
Использовать Django можно, если:
Выбрать другие варианты лучше:
Django — один из наиболее востребованных фреймворков на Python. Применение в проектах ведущих компаний подтверждает его удобство, универсальность и надежность.
Почему Django — лучший фреймворк для разработки сайтов
Django считается лучшим веб-фреймворком, написанным на Python. Этот инструмент удобно использовать для разработки сайтов, работающих с базами данных. Из этой статьи вы узнаете о Django и поймёте, почему это ключевое звено в экосистеме Python.
Прошлое и будущее фреймворка Django: краткий экскурс в историю
Django создали разработчики издания Lawrence-Journal World. Этой газете понадобился сайт, чтобы публиковать новости в интернете. Программисты Эдриан Головатый и Саймон Виллисон создали веб-приложение и сделали его публичным.
Вокруг Django быстро сформировалось активное сообщество. Фреймворк стал стремительно развиваться усилиями волонтёров. Значительную роль в успехе Django сыграли несколько известных сайтов, которые использовали этот фреймворк. В их число входят Pinterest, Dropbox, Spotify, сайт The Washington Post. В настоящее время сообщество Django включает более 11 тыс. разработчиков из 166 стран мира.
Эти сайты используют Django
Справка: русскоязычные разработчики и пользователи часто используют такой вариант написания: «Джанго». Будьте готовы к этому, если встретитесь с этим вариантом в обсуждениях или профессиональной переписке. Кстати, у нас есть краткий словарь профессионального сленга программистов.
В Django реализован принцип DRY (don’t repeat yourself). Благодаря этому сокращается время создания сайтов. То есть при использовании Django вам не нужно несколько раз переписывать один и тот же код. Фреймворк позволяет создавать сайт из компонентов. Это можно сравнить со строительством крепости с помощью Lego.
Django подходит для разработки высоконагруженных веб-приложений. Это возможно благодаря архитектуре фреймворка, о которой пойдёт речь ниже.
Изучайте Python на Хекслете Стартовые курсы в профессии «Python-программист» можно пройти бесплатно. Среди них курсы «Python: основы», «Системы контроля версий», «Python: настройка окружения» и другие. Регистрируйтесь и начинайте учиться!
Почему MVT архитектура важна для веб-приложений на Django: разделение и независимое использование уровней
Фреймворк Django написан на языке программирования Python, поэтому его структура соответствует особенностям языка. Создатели реализовали в Django паттерн MVC, и он применяется в текущей версии фреймворка.
Архитектура MVC позволяет разработчику работать с визуальным представлением и бизнес-логикой приложения отдельно. Кстати, при работе с Django специалисты чаще используют термин MVT — Model-View-Template или модель-представление-шаблон. Компоненты MVT можно использовать независимо друг от друга.
Схема архитектуры MVT в Django
Документация Django определяет модель (model) как «источник информации о данных, в которых содержатся ключевые поля и поведение данных». Обычно одна модель указывает на одну таблицу в базе данных. Django поддерживает базы данных PostgreSQL, MySQL, SQLite и Oracle.
Модели содержат информацию о данных. Эти данные представлены атрибутами или полями. Поскольку модель представляет собой простой класс, она ничего не знает о других уровнях Django. Взаимодействие между уровнями происходит через API.
Модель отвечает за бизнес-логику, методы, свойства и другие элементы, связанные с манипуляцией данными. Также модели позволяют разработчикам создавать, читать, обновлять и удалять объекты в базе данных.
Представление (view) решает три задачи: принимает HTTP-запросы, реализует бизнес-логику, определённую методами и свойствами, отправляет HTTP-ответ в ответ на запросы. То есть представление получает данные от модели и предоставляет шаблонам (templates) доступ к этим данным или предварительно обрабатывает данные и затем предоставляет к ним доступ шаблонам.
В Django реализован мощный движок шаблонов и собственный язык разметки. Шаблоны представляют собой файлы с HTML-кодом, с помощью которого отображаются данные. Содержимое файлов может быть статическим или динамическим. Шаблоны не содержат бизнес-логики. Поэтому они только отображают данные.
Шаблон страницы
Такая архитектура позволяет Django успешно решать разные задачи, о которых ниже.
Какие задачи можно решать с помощью Django: движки для сайтов, CRM, machine learning
Неопытные специалисты считают Django одной из многих систем управления контентом (CMS). На самом деле это программный инструмент, с помощью которого можно создавать и запускать веб-приложения.
Справка: название фреймворка подчёркивает его многогранность. Он назван в честь известного джазового гитариста Джанго Рейнхардта. Этот музыкант виртуозно играл на гитаре, хотя два пальца на его левой руке не функционировали после травмы, полученной во время пожара. То есть музыканту приходилось брать аккорды тремя пальцами.
Фреймворк Django справляется с большим количеством задач и повышенными нагрузками. Его применяют для создания:
Также Django подходит для создания алгоритмических генераторов, платформ для электронных рассылок, систем верификации, систем фильтрации с динамическими правилами и сложными параметрами, платформ для анализа данных и сложных вычислений, машинного обучения.
Тысячи сайтов в разных странах мира созданы на Django. Этот фреймворк отлично подходит для разработки веб-приложений. Давайте посмотрим, из-за чего разработчики любят данный инструмент.
Почему Django — отличный фреймворк для веб-разработки: экосистема, SEO, библиотеки
Если вы спросите у нескольких разработчиков, почему они выбрали Django, ответы будут преимущественно одинаковыми. Ниже описаны основные преимущества фреймворка, благодаря которым он стал популярным.
Развитая экосистема
Опытные разработчики рекомендуют воспринимать Django как систему. Это значит, что фреймворк обычно используется с большим количеством сторонних приложений. Их можно выбирать в зависимости от потребностей конкретного проекта.
Чтобы лучше понять этот принцип, представьте конструктор Lego. В нём есть много типовых блоков. В Django тоже есть типовые блоки. Например, блок авторизации или блок подписки на рассылку применяется практически в каждом проекте. Созданные с помощью фреймворка веб-приложения состоят из таких независимых блоков.
Зрелость
Django был представлен в 2005 году. За 14 лет существования он сильно изменился и усовершенствовался. В фреймворке постоянно появляются новые возможности, а старые совершенствуются.
Важный момент: когда вы разбираетесь с Django и ищете ответ на конкретный вопрос, чаще всего это не вызывает затруднений. Тысячи специалистов уже решали такие же проблемы до вас и делились своим опытом в интернете. Так работает сообщество Django.
Административная панель
Административная панель Django автоматически генерируется при создании приложения. Это избавляет разработчика от необходимости создавать админку вручную.
С помощью сторонних приложений дефолтную консоль управления Django можно усовершенствовать и адаптировать под нужды своего проекта. Кроме того, фреймворк позволяет настраивать интерфейс дефолтной административной панели.
SEO-дружественность
Написанный на Python код получается читабельным и понятным даже неподготовленным людям. Это один из факторов, благодаря которым веб-приложения на Python считаются SEO-дружественными. Django генерирует семантические URL. Их также называют человеко-понятными URL или ЧПУ. В приложениях на Django легко реализуются другие функции, необходимые для поисковой оптимизации.
Расширяемость
Функциональность Django расширяется с помощью плагинов. Это программные модули, которые позволяют быстро добавить на сайт нужную функцию. В официальном каталоге есть сотни плагинов, которые позволяют легко реализовать на сайте sitemap.xml, управлять доступами, подключить платёжную систему Stripe и так далее. При необходимости вы можете отключать или заменять плагины, чтобы адаптировать приложение к текущим нуждам проекта.
Библиотеки
В популярных языках программирования есть библиотеки, с помощью которых удобно решать специальные задачи. В библиотеках можно найти готовые решения: функции, классы, конфигурации и так далее. Благодаря таким решениям расширяются возможности языка, а также упрощается создание приложений.
Django поддерживает использование библиотек при разработке веб-приложений. В число популярных библиотек входят:
В Django реализовано объектно-реляционное отображение (ORM), которое обеспечивает взаимодействие приложения с базами данных (БД). ORM автоматически передаёт данные из БД, например, PostgreeSQL или MySQL, в объекты, которые используются в коде приложения.
Схема работы ORM
ORM ускоряет разработку прототипов и готовых веб-приложений на Django. Разработчику даже не нужно знать язык, который используется для взаимодействия с базами данных.
Также ORM позволяет быстро переключаться между базами данных с минимальными изменениями кода. Например, вы можете использовать SQLite на локальном сервере, а потом переключиться на MySQL на production-сервере. Однако для минимизации ошибок лучше использовать одну базу данных во время разработки и в продакшене.
Недостатки Django: не для маленьких проектов, не всегда предсказуемое поведение
У Django есть недостатки, как у любого инструмента. Основные недостатки фреймворка перечислены ниже.
Не подходит для небольших проектов
Возможности Django могут быть избыточными для небольшого проекта. Однако в экосистеме Python есть другие фреймворки, которые можно использовать в таких случаях. Например, если вы хотите сделать простой чат, лучше использовать Flask.
Нет поддержки WebSocket по умолчанию
Протокол WebSocket обеспечивает обмен данными между сервером и браузером в режиме реального времени. Django не поддерживает эту функциональность из коробки. Но проблему можно решить с помощью других инструментов, например, aiohttp.
Монолитность
Некоторые модули Django, например, ORM или формы, сложно заменить. Разработчикам приходится тратить много времени, чтобы изменить внутреннюю структуру фреймворка и использовать альтернативные инструменты.
Непредсказуемость поведения некоторых компонентов
Поведением некоторых компонентов Django не всегда просто управлять. Например, к таким компонентам относится административная консоль. Если вы захотите добавить что-то, что не входит в экосистему Django, это может потребовать серьёзных усилий и много времени.
В целом преимущества Django с запасом перекрывают недостатки этого фреймворка. Но всегда полезно знать об альтернативах, о которых пойдёт речь дальше.
Альтернативы Django
Фреймворки ускоряют разработку веб-приложений. И в экосистеме Python есть несколько фреймворков, которые можно рассматривать в качестве альтернативы Django. В их число входят Pyramid, Flask и Tornado. Все три инструмента подходят для работы как с масштабными проектами, так и с небольшими приложениями.
Также в качестве альтернативы можно рассматривать PHP-фреймворки, например, Laravel, Symphony или CakePHP. Например, Laravel подходит для работы с масштабными и маленькими проектами, и в этом фреймворке есть мощный движок шаблонов.
Если для вашего проекта критически важна безопасность, Laravel можно считать инструментом первого выбора. В нём реализованы мощные инструменты шифрования. Этот PHP-фреймворк работает с базами данных MySQL, PostgreSQL, SQL Server, SQ Lite.
Ещё одна достойная альтернатива — фреймворк Ruby on Rails. Этот инструмент ускоряет создание веб-приложений и позволяет разработчикам сфокусироваться скорее на бизнес-логике, чем на коде. Кстати, наш сайт создан на Ruby on Rails.
Достойные альтернативы Django существуют, а выбор инструмента всегда зависит от особенностей проекта, языка программирования, с которым вы работаете, и других факторов.
Заключение: почему стоит выбрать Django
Разработчики выбирают Django благодаря таким характеристикам:
Если хотите поделиться опытом работы с Django, пишите в комментариях.
Адаптированный перевод статьи Why Django is the best web framework for your project by Ekaterina Zublenko and Angela Beklemysheva. Мнение авторов может не совпадать с мнением администрации «Хекслета».
Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
В каких случаях стоит использовать Django (а в каких не стоит)
Давайте поможем разработчикам разобраться, подходит ли фреймворк Django для их следующего проекта. Вполне вероятно — подходит.
Не стоит хвататься за определенный язык программирования или фреймворк лишь потому, что вы пользовались им в вашем предыдущем проекте, или просто потому что он вам хорошо знаком. Так дела не делаются.
Прежде чем приступать к новому проекту, следует оценить, какой язык или фреймворк лучше всего подойдет вам для достижения желаемого результата. Что для вас наиболее важно? Безопасность, скорость разработки, масштабируемость, универсальность, поддержка?
Лучше принять информированное решение перед тем как приступать к работе, чем потом раскаиваться в поспешном (или, хуже того, навешивать на проект костыли в процессе реализации – из-за того, что заранее не озаботились его поддержкой).
Я много лет работал с разными технологиями, имел дело как с мобильной, так и с веб-разработкой, и считаю, что Django предлагает такой полноценный набор возможностей, каких нет ни в одном другом веб-фреймворке.
Понимаю, это громкое заявление. Позвольте мне его обосновать.
«На Django основано множество сайтов, используемых самым активным образом, в частности, Instagram и Pinterest. Даже Facebook использует Django для многих своих утилит. Django зародился в издательской среде, поэтому неудивительно, что данный фреймворк используется на таких сайтах как The Washington Post и Smithsonian Magazine.” — Амит Ашвини, Вице-президент по маркетингу @ Zibtek
Общий взгляд: когда использовать Django
Если хотя бы несколько из нижеприведенных тезизов – про вас (и в списке нет тезисов, с которыми вы категорически не согласны), то, вполне вероятно, Django хорошо подойдет для вашего проекта.
Если вы – веб-разработчик, и уже знаете, как веб устроен, то работа с Django пойдет для вас сравнительно гладко. Необходимо понимать, как структурируется Django, и некоторые другие вещи, конечно, тоже – и считайте, что вы готовы.
Сайты, работающие на фреймворке Django
Вы еще сомневаетесь, стоит ли тратить свое драгоценное время, чтобы напрактиковаться с Django? Для начала давайте обсудим, по каким причинам Django может НЕ ПОДОЙТИ для вашего проекта:
Когда не стоит использовать Django
Причины использовать Django
Фреймворк Django написан на Python:
Знаю, вам это известно.
Поэтому воспользуюсь случаем и подчеркну некоторые ключевые достоинства Django, которые он унаследовал от Python. Буду краток.
Python – один из самых популярных и быстрорастущих языков программирования в мире.
Изучить 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.
Сравните эти условия с любым другим фреймворком – и, думаю, вам бы нигде не удалось сделать ничего подобного всего в несколько следующих строк кода:
Здесь речь не только о том, чтобы “не повторяться”. Такой подход уберегает вас от багов в перспективе. Все мы оказывались в ситуациях, когда довелось изменить что-то в одном месте, а в другом месте заменить забыли – и это выяснилось лишь после того, как у множества пользователей начались проблемы.
В Django, возвращаясь к вышеприведенному коду, если вам когда-нибудь придется заменить `max_length` поля на что-нибудь другое – просто сделайте это здесь. Изменение автоматически применится к валидации всех маршрутов и к базе данных.
Объектно-реляционное отображение в Django
Django предоставляет полнофункциональный механизм ORM «из коробки».
Я работал со множеством инструментов ORM в разных технологиях, в том числе, в Eloquent, greenDAO, Yii AR, т.д. Во всех из них простейшие запросы обрабатываются довольно хорошо, но рано или поздно мне приходилось писать те или иные запросы с нуля, поскольку механизм ORM не справлялся с конкретным практическим случаем.
С Django ORM в такие ситуации я пока не попадал. Он сработан настолько хорошо, что вы просто можете забыть, что работаете с запросами к базе данных. Именно таким и должно быть объектно-реляционное отображение. Ниже приведены некоторые примеры Django ORM:
Стремительная разработка
Этим любят похвастаться создатели практически любого веб-фреймворка, и, пожалуй, все они действительно правы – смотря какой смысл мы вкладываем в слово «стремительная».
Правда, с 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 фигурирует в числе самых излюбленных и востребованных фреймворков:
Кроме вышеупомянутого опыта работы с PHP, я также рапзрабатывал приложения под Android на Java, клиентские приложения на React.js. Во всех этих случаях я потратил изрядное количество времени на рефакторинг базы кода, подыскивая наилучшую архитектуру, через пару месяцев увязая в проблемах с масштабируемостью и вновь принимаясь за рефакторинг.
Недавно я переписал с Laravel на Django одно приложение, которое было у меня в продакшене более года. Мне удалось развернуть новую базу кода менее чем за 10 дней, написав для этого минимальное количество кода (говорю же: сложность уменьшается!) В обратном направлении подобная операция определенно заняла бы более месяца.
Если вы попытаетесь напрямую сравнивать другие фреймворки с Django, это вам ничего не даст.
Контроль производительности может показать, что фреймворк на Java быстрее Django. Вы можете хорошо разбираться в PHP, так что, возможно, разработка приложения на Django пойдет у вас быстрее, чем на знакомом вам PHP-фреймворке. В случае с совсем простым приложением настройка Django может показаться вам слегка утомительной – конечно, гораздо проще написать файл со скриптами. Результаты опросов могут разниться в зависимости от того, среди какой аудитории они проводились.
Однако, здесь мы рассуждаем не только о фреймворках, относящихся к другим технологиям. Даже если вы знакомы c Python, возможно, микрофреймворк Flask покажется вам более удобным и желательным. Придется задуматься, на котором из них остановиться.
Мой совет – просто не сравнивайте их.
Вывод
На мой взгляд, в Django удалось идеально сбалансировать производительность, архитектуру, уровень сложности при разработке, безопасность и масштабируемость.
Если вы начинаете писать проект с нуля – настоятельно рекомендую попробовать сделать его с Django.
Веб-фреймворк Django (Python)
Django является чрезвычайно популярным и полнофункциональным серверным веб-фреймворком, написанным на Python. Данный модуль расскажет о том, почему Django один из самых популярных серверных веб-фреймворков, как установить среду разработки, и как начать использовать его для создания собственных веб-приложений.
Требования
Перед началом работы с этим модулем вам не обязательно уже быть знакомым с Django. Вам бы пригодилось общее понимание того, что такое серверное веб-программирование и веб-фреймворки, почерпнутое, в идеале, из топиков другого нашего модуля Первые шаги серверного программирования веб-сайтов.
Рекомендуется базовое понимание концепций программирования и языка Python, но это не обязательно для освоения основных понятий.
Примечание: Python является одним из самых доступных в чтении и понимании для новичков языком программирования. Тем не менее, если вы захотите глубже понять этот модуль, в Интернете сейчас доступны многочисленные бесплатные книги и учебные пособия (новички в программирование возможно захотят посетить Python for Non Programmers на вики-страницах python.org).
Руководство
Задания
Следующее задание проверит ваше понимание того, как создать сайт с помощью Django, как описано в руководствах, перечисленных выше.
DIY Django мини-блог В этом задании вы будете использовать некоторые знания, которые вы узнали из этого модуля, чтобы создать свой собственный блог.
Эффективный Django. Часть 1
Оглавление
Введение ⇧
«Связный» код — это код, который сосредоточен на выполнении одной вещи, только одной единственной вещи. Это значит, что когда вы пишете функцию или метод — написанный вами код должен делать что-то одно и делать это хорошо.
Это непосредственно относится к написанию тестируемого кода: код, который делает много вещей, достаточно часто является чересчур сложным для тестирования. Когда я ловлю себя на мысли: «Хорошо, этот кусок кода слишком сложен, чтобы писать для него тесты — это просто не стоит потраченных усилий» — вот сигнал к тому, чтобы вернутся назад и сосредоточиться на упрощении. Тестируемый код — такой код, который позволяет просто писать для него тесты; код, в котором легко найти проблемы.
И наконец, мы хотим писать масштабируемый код. Это означает не просто масштабировать его в терминах исполнения, но так же увеличивать в терминах команды и командного понимания. Хорошо протестированные приложения проще для понимания другими (и проще для изменения ими), что подразумевает большую возможность улучшить ваше приложение, путем добавления новых инженеров.
Моя цель — убедить вас в важности этих принципов, и предоставить примеры того, как следуя им, построить более стойкое Django-приложение. Я собираюсь последовательно пройти через процесс построения приложения для управления контактами, рассказывая про решения и стратегию тестирования, которые я использую.
Эти документы являются сочетанием заметок и примеров подготовленных для PyCon 2012, PyOhio 2012, и PyCon 2013, а также для web-разработки Eventbrite. Я все еще работаю над объединением их в один документ, но надеюсь вы найдете их полезными.
Примеры кода для этого руководства доступны на github’е. Отзывы, предложения и вопросы можете присылать на nathan@yergler.net.
Этот документ доступен на сайте, а также в форматах PDF и EPub.
Видео этого руководства с PyCon можно посмотреть на YouTube.
Глава 1. Приступая к работе ⇧
1.1. Ваша среда разработки
Изоляция означает, что вы не сможете случайно воспользоватся инструментами или пакетами установленными вне вашего окружения. Это особенно важно, когда подобное происходит с чем-то, похожим на пакеты Python с расширениями написанными на C: если вы используете что-то установленное на системном уровне и не знаете об этом, то при развертывании или распространении своего кода вы можете обнаружить, что он работает не так как предполагалось. Инструменты наподобие virtualenv могут помочь создать нечто похожее на изолированную среду.
Ваша среда предопределена, если вы уверены в том, на какую версию ваших зависимостей вы полагаетесь и сможете ли вы наверняка воспроизвести системное окружение.
1.1.1. Изоляция
1.1.2. Предопределенность
1.1.3. Сходство
1.2. Настройка вашего окружения
1.2.1. Создание чистого рабочего пространства
Примечание переводчика:
Для начала создадим каталог ( tutorial ), в котором будем работать:
В каталоге venv будет находится наше виртуальное окружение, а в каталоге project — Django-проект
1.2.2. Создание файла зависимостей
Создайте файл requirements.txt в директории tutorial с единственной строкой (зависимостью) в нем:
Примечание переводчика:
В случае, если вы хотите использовать последнюю версию Django (1.7 — на момент написания перевода) — вместо строки Django==1.6.7 оставьте просто Django — pip установит последнюю доступную версию.
1.2.3. Установка зависимостей
А теперь мы можем использовать pip для установки зависимостей:
1.3. Начало проекта Django
Когда здание находится в процессе постройки, строительные леса часто используются для поддержания структуры до того как строительство будет завершено. Строительные леса могут быть временными или они могут служить частью фундамента здания, но несмотря на это, они представляют некоторую поддержку когда вы только начинаете работу.
Django, как и многие web-фреймворки, представляет скаффолдинг для вашей разработки. Это происходит при помощи принятия решений и предоставления отправной точки для вашего кода, что позволяет вам сосредоточится на проблеме, которую вы пытаетесь решить, а не на том, как разобрать HTTP-запрос. Django предоставляет скаффолдинг как для работы с HTTP, так и для работы с файловой системой.
1.3.1. Создание проекта
Созданный проект имеет следующую структуру
1.3.2. Скаффолдинг проекта
1.3.3. Создание приложения
Созданное приложение имеет следующую структуру:
Примечание переводчика:
На текущий момент наша директория
/tutorial/ содержит файл зависимостей ( requirements.txt ), директорию с виртуальным окружением ( venv/ ), один проект ( project/addressbook ), одно приложение ( project/contacts ) и имеет следующее содержание:
Глава 2. Используем модель ⇧
2.1. Конфигурирование базы данных
Для использования SQLite нам нужно указать движок ( ENGINE ) и имя базы ( NAME ). SQLite интерпертирует имя базы как имя файла для базы данных:
2.2. Создание модели
Модели Django отображают (грубо говоря) таблицы базы данных, и предоставляют место для инкапсулирования бизнес-логики. Все модели являются наследниками базового класса Model и содержат поля определений. Давайте создадим простую модель Contacts для нашего приложения в файле contacts/models.py :
После того, как вы создали модель, необходимо дополнить вашу базу данных новыми таблицами. Команда Django syncdb смотрит установленные модели и создает (если нужно) таблицы для них:
Примечание переводчика:
Django предложит создать суперпользователя для андминки, которая включена в этой версии по умолчанию. Воспользуйтесь его предложением.
Примечание переводчика:
Если вы используете Django версии 1.7 и выше — вывод будет следующий:
Однако нашей таблицы с контактами нигде не видно. Причина этого состоит в том, что нам нужно еще указать проекту использовать приложение.
После этого запустите syncdb снова:
Примечание переводчика:
Для Django версии 1.7 и выше вам нужно будет запустить сначала команду makemigrations — для создания миграций на основе изменений в моделях, а после этого выполнить команду migrate — для того чтобы применить созданные миграции.
Примечание переводчика:
Вывод для Django 1.7 и выше:
Заметьте, что Django создает таблицу с именем contacts_contact : по умолчанию Dj ango дает таблицам имена используя комбинацию имени приложения и имени модели. Вы можете изменить это с помощью опций модели Meta.
2.3. Взаимодействие с моделью
Теперь, когда модель синхронизирована с базой данных мы можем взаимодействовать с нею используя интерактивную оболочку:
Здесь использовалось несколько новых штук. Во-первых, команда manage.py shell запускает для нас интерактивную оболочку Python’а с правильно установленными путями для Django. Если вы попробуете запустить интерпретатор Python и просто импортировать ваше приложения, будет выброшено исключение, потому что Django не знает, какие настройки использовать, и не может отобразить экземпляры модели на базу данных.
2.4. Написание тестов
Вы можете запустить тесты для вашего приложения используя команду manage.py test :
Если вы запустите это, то увидите что выполнилось около 420 тестов. Это удивляет, так как мы написали только один. Произошло это потому, что по умолчанию Django запускает тесты для всех установленных приложений. Когда вы добавляли приложение contacts в наш проект, то могли увидеть, что там по умолчанию были добавлены несколько встроенных приложений Django. Дополнительные 419 тестов были взяты оттуда.
Примечание переводчика:
В нашем случае (при использовании версии Django 1.6.7) предыдущий абзац несколько устарел: запустится только один тест — тот который мы создали. Вывод команды будет такой как указано ниже.
Если же вы захотите запустить тесты для определенного приложения — укажите имя приложения в команде:
2.5. Резюме
Примечание переводчика:
Для того чтобы протестировать наше, пока еще пустое, приложение нужно выполнить следующую команду:
Это запустит встроенный сервер, функционал которого любезно предоставляет нам Django. В параметрах после runserver указывается ip-адрес и порт, который будет слушаться работающим сервер. В нашем случае сервер будет принимать запросы от всех ip-адресов при обращении на 8080 порт.
Django введение
В первой статье о Django мы отвечаем на вопрос «Что такое Django?» и даём обзор того, что делает его особенным. Мы опишем основные функции, в том числе некоторые из расширенных функций, которые у нас не будет времени подробно рассмотреть в этом модуле. Мы также покажем вам некоторые основные строительные блоки приложения Django (хотя на данный момент у вас ещё не будет среды разработки для тестирования).
Требования: | Базовая компьютерная грамотность. Общее понимание server-side website programming, и в частности, механики client-server interactions in websites. |
---|---|
Задача: | Узнать, что такое Django, какие функции он предоставляет, и основные строительные блоки приложения Django. |
Что такое Django?
Django — это высокоуровневый Python веб-фреймворк, который позволяет быстро создавать безопасные и поддерживаемые веб-сайты. Созданный опытными разработчиками, Django берёт на себя большую часть хлопот веб-разработки, поэтому вы можете сосредоточиться на написании своего веб-приложения без необходимости изобретать велосипед. Он бесплатный и с открытым исходным кодом, имеет растущее и активное сообщество, отличную документацию и множество вариантов как бесплатной, так и платной поддержки.
Django помогает писать программное обеспечение, которое будет:
Полным Django следует философии «Всё включено» и предоставляет почти всё, что разработчики могут захотеть сделать «из коробки». Поскольку всё, что вам нужно, является частью единого «продукта», всё это безупречно работает вместе, соответствует последовательным принципам проектирования и имеет обширную и актуальную документацию. Разносторонним Django может быть (и был) использован для создания практически любого типа веб-сайтов — от систем управления контентом и wiki до социальных сетей и новостных сайтов. Он может работать с любой клиентской средой и может доставлять контент практически в любом формате (включая HTML, RSS-каналы, JSON, XML и т. д.). Сайт, который вы сейчас читаете, создан с помощью Django! Хотя Django предоставляет решения практически для любой функциональности, которая вам может понадобиться (например, для нескольких популярных баз данных, шаблонизаторов и т. д.), внутренне он также может быть расширен сторонними компонентами, если это необходимо. Безопасным Django помогает разработчикам избежать многих распространённых ошибок безопасности, предоставляя фреймворк, разработанный чтобы «делать правильные вещи» для автоматической защиты сайта. Например, Django предоставляет безопасный способ управления учётными записями пользователей и паролями, избегая распространённых ошибок, таких как размещение информации о сеансе в файлы cookie, где она уязвима (вместо этого файлы cookie содержат только ключ, а фактические данные хранятся в базе данных) или непосредственное хранение паролей вместо хэша пароля. Хэш пароля — это значение фиксированной длины, созданное путём обработки пароля через криптографическую хэш-функцию. Django может проверить правильность введённого пароля, пропустив его через хэш-функцию и сравнив вывод с сохранённым значением хэша. Благодаря «одностороннему» характеру функции, даже если сохранённое хэш-значение скомпрометировано, злоумышленнику будет сложно определить исходный пароль. Django, по умолчанию, обеспечивает защиту от многих уязвимостей, включая SQL-инъекцию, межсайтовый скриптинг, подделку межсайтовых запросов и кликджекинг (см. Website security для получения дополнительной информации об этих атаках). Масштабируемым Django использует компонентную “shared-nothing” архитектуру (каждая её часть независима от других и, следовательно, может быть заменена или изменена, если это необходимо). Чёткое разделение частей означает, что Django может масштабироваться при увеличении трафика, путём добавления оборудования на любом уровне: серверы кеширования, серверы баз данных или серверы приложений. Одни из самых загруженных сайтов успешно масштабировали Django (например, Instagram и Disqus, если назвать только два из них). Удобным в сопровождении Код Django написан с использованием принципов и шаблонов проектирования, которые поощряют создание поддерживаемого и повторно используемого кода. В частности, в нём используется принцип «Don’t Repeat Yourself» (DRY, «не повторяйся»), поэтому нет ненужного дублирования, что сокращает объём кода. Django также способствует группированию связанных функциональных возможностей в повторно используемые «приложения» и, на более низком уровне, группирует связанный код в модули (в соответствии с шаблоном Model View Controller (MVC)). Переносным Django написан на Python, который работает на многих платформах. Это означает, что вы не привязаны к какой-либо конкретной серверной платформе и можете запускать приложения на многих версиях Linux, Windows и Mac OS X. Кроме того, Django хорошо поддерживается многими веб-хостингами, которые часто предоставляют определённую инфраструктуру и документацию для размещения сайтов Django.
Как он появился?
Django был разработан в период с 2003 по 2005 год командой, которая занималась созданием и обслуживанием газетных веб-сайтов. После создания нескольких сайтов, команда начала повторно использовать множество общего кода и шаблонов проектирования. Этот общий код эволюционировал в веб-фреймворк, который превратился в проект «Django» с открытым исходным кодом в июле 2005 года.
Django продолжает расти и улучшаться с момента его первого релиза (1.0) в сентябре 2008 года до недавно выпущенной версии 3.1 (2020). В каждой версии добавлены новые функциональные возможности и исправлены ошибки, начиная от поддержки новых типов баз данных, шаблонизаторов и кеширования, до добавления «общих» функций просмотра и классов (уменьшающих объём кода, который разработчики должны писать для ряда программных задач).
Примечание: Ознакомьтесь с примечаниями к версии на сайте Django, чтобы увидеть что изменилось в последних версиях и как много работы было проделано, чтобы улучшить Django.
Django — это процветающий совместный проект с открытым исходным кодом, в котором заняты многие тысячи пользователей и участников. Несмотря на то, что у него всё ещё есть некоторые особенности, которые отражают его происхождение, Django превратился в универсальный фреймворк, способный разрабатывать веб-сайты любого типа.
Насколько популярен Django?
Нет никаких доступных и окончательных оценок популярности серверных фреймворков (хотя сайты наподобие Hot Framework и пытаются оценить популярность, используя такие механизмы, как подсчёт количества проектов на GitHub и вопросов на StackOverflow для каждой платформы). Лучший вопрос — «достаточно ли Django популярен», чтобы избежать проблем непопулярных платформ. Продолжает ли он развиваться? Можете ли вы получить помощь, если вам нужно? Найдёте ли вы оплачиваемую работу, если изучите Django?
Основываясь на количестве крупных сайтов, которые используют Django, количестве участников и количестве людей, предоставляющих как бесплатную, так и платную поддержку, можно ответить: да, Django — популярный фреймворк!
Django используют такие крупные сайты, как Disqus, Instagram, Knight Foundation, MacArthur Foundation, Mozilla, National Geographic, Open Knowledge Foundation, Pinterest и Open Stack (источник: обзорная страница Django).
Является ли Django гибким?
Веб-фреймворки часто можно поделить на «гибкие» и «негибкие».
Напротив, у гибких фреймворков гораздо меньше ограничений на лучший способ склеивания компонентов для достижения цели или даже того, какие компоненты следует использовать. Они облегчают разработчикам использование наиболее подходящих инструментов для выполнения конкретной задачи, хотя и за счёт того, что вам нужно самим найти эти компоненты.
Django «умеренно гибкий» и, следовательно, обеспечивает «лучшее из обоих миров». Он предоставляет набор компонентов для обработки большинства задач веб-разработки и один (или два) предпочтительных способа их использования. Однако такая архитектура Django означает, что вы обычно можете выбирать из нескольких различных опций или при необходимости добавлять поддержку для совершенно новых.
Как выглядит код Django?
На традиционном информационном веб-сайте веб-приложение ожидает HTTP-запросы от веб-браузера (или другого клиента). Когда запрос получен, приложение разрабатывает то, что необходимо на основе URL-адреса и, возможно, данных в POST или GET запросах. В зависимости от того, что требуется, далее он может читать или записывать информацию из базы данных или выполнять другие задачи, необходимые для удовлетворения запроса. Затем приложение вернёт ответ веб-браузеру, часто динамически создавая HTML-страницу для отображения в браузере, вставляя полученные данные в HTML-шаблон.
Веб-приложения, написанные на Django, обычно группируют код, который обрабатывает каждый из этих шагов, в отдельные файлы:
Примечание: Django реализует уровневую архитектуру «Model View Template (MVT)». Она имеет много общего с более известной архитектурой Model View Controller.
Следующие разделы дадут вам понимание того, как выглядят основные части Django (мы их изучим более детально чуть позже на курсе, когда будет настраивать окружение разработчика).
Отправка запроса в правильное view (urls.py)
Сопоставитель URL-адресов обычно содержится в файле urls.py. В примере ниже сопоставитель ( urlpatterns ) определяет список сопоставлений междумаршрутами (определёнными URL-шаблонами) и соответствующими функциями отображения (view). Если получен HTTP-запрос, который имеет URL-адрес, соответствующий определённому шаблону, то затем будет вызвана связанная функция отображения (view) и передана в запрос.
Объект urlpatterns является списком функций path() и/или re_path() (в Python списки определяются с помощью квадратных скобок, внутри которых элементы разделены запятыми и могут содержать необязательную завершающую запятую. Например: [item1, item2, item3,] ).
Второй аргумент — это ещё одна функция, которая будет вызываться при сопоставлении шаблона. Обозначение views.book_detail указывает, что функция называется book_detail() и может быть обнаружена в модуле с именем views (т.е. внутри файла с именем views.py ).
Обработка запроса (views.py)
Отображения (views) — это сердце веб-приложения, принимающего HTTP-запросы от веб-клиентов и возвращающего HTTP-ответы. Между этим они используют другие ресурсы фреймворка для доступа к базам данных, шаблонам визуализации и т. д.
Примечание: Немного Python:
Отображения (view) обычно содержатся в файле views.py.
Определение данных модели (models.py)
Веб-приложения Django обрабатывают и запрашивают данные через объекты Python, называемые моделями. Модели определяют структуру хранимых данных, включая типы полей и, возможно, их максимальный размер, значения по умолчанию, параметры списка выбора, текст справки для документации, текст меток для форм и т. д. Определение модели не зависит от используемой базы данных — ваши модели будут работать в любой из них. После того как вы выбрали базу данных, которую хотите использовать, вам не нужно напрямую обращаться к ней — вы просто пишете свою структуру модели и другой код, а Django выполняет всю «грязную работу» по обращению к базе данных за вас.
Примечание: Немного Python:
Запросы данных (views.py)
Модель Django предоставляет простой API запросов для поиска в базе данных. Поиск может осуществляться по нескольким полям одновременно, используя различные критерии (такие как exact («точный»), case-insensitive («без учёта регистра»), greater than («больше чем») и т. д.), и может поддерживать сложные выражения (например, вы можете указать поиск в командах U11, у которых есть имя команды, начинающееся с «Fr» или заканчивается на «al»).
Фрагмент кода показывает функцию view (обработчик ресурсов) для отображения всех команд U09. Выделенная жирным строка показывает, как мы можем использовать модель API-запросов для того, чтобы отфильтровать все записи, где поле team_level в точности содержит текст ‘U09’ (обратите внимание, как эти критерии передаются функции filter() в качестве аргумента с именем поля и типом соответствия, разделённым двойным подчёркиванием: team_level__exact).
Вывод данных (HTML-шаблоны)
Системы шаблонов позволяют указать структуру выходного документа, используя заполнители для данных, которые будут вставлены при генерировании страницы. Шаблоны часто используются для создания HTML, но также могут создавать другие типы документов. Django «из коробки» поддерживает как собственную систему шаблонов, так и другую популярную библиотеку Python под названием Jinja2 (она также может быть использована для поддержки других систем, если это необходимо).
Что ещё можно сделать?
В предыдущих разделах показаны основные особенности, которые вы будете использовать почти в каждом веб-приложении: сопоставление URL-адресов, отображение, модели и шаблоны. Также Django предоставляет несколько других вещей:
Резюме
Поздравляем, вы завершили первый шаг в своём путешествии по Django! Теперь вы должны понимать основные преимущества Django, немного его истории, и примерно как может выглядеть каждая из основных частей приложения Django. Вы должны также изучить несколько вещей о языке программирования Python, включая синтаксис списков, функций и классов.
Вы уже видели код на Django выше, но в отличие от клиентского кода вам нужно настроить среду разработки для её запуска. Это наш следующий шаг.
Как вы думаете, что общего между youtube, google search, dropbox и instagram? Да, конечно, все они сделаны с использованием фреймворка Django! И этим занятием мы открываем курс по этому очень популярному фреймворку, разработанному специально для языка Python.
И еще желательно знать основы ORM – взаимодействие с БД через модели классов. Яркий пример реализации ORM – пакет SQLAlchemy. Далее, на занятиях этого цикла я буду полагать, что вы хорошо знаете язык Python, шаблонизатор Jinja, умеете составлять регулярные выражения (пакет re) и SQL-запросы. Обо всем этом я уже рассказывал на нашем канале и ссылки на соответствующие плейлисты вы найдете под этим видео.
Давайте теперь разберемся, для чего же вообще предназначен фреймворк Django? Если очень кратко, то для обеспечения работы сайтов на стороне сервера. То есть, это инструмент для бэкенд разработчиков. А если немного подробнее, то процесс взаимодействия пользователя с сайтом можно представить в таком виде:
Сначала от клиента поступает запрос, например, он вводит в браузере адрес https://youtube.com. Информационные пакеты начинают двигаться в сторону сервера с сайтом Youtube. Вопрос о том, как они это делают, мы оставим в стороне, это называется маршрутизацией в сети Интернет. Главное, что они доходят до сервера (то есть, компьютера), где расположен Youtube. На этом компьютере установлено специальное программное обеспечение – Web-сервер. Очень часто используют уже готовые разработки с открытым кодом: Apache и Nginx. Реже какие-либо свои программные продукты. Так вот, этот Web-сервер постоянно «слушает» каналы связи и в момент поступления запроса от пользователя должен перенаправить его на обработку соответствующему сайту (так как на одном сервере может находиться множество сайтов). Сайты способны по разному обрабатывать входящие запросы, например, используя PHP и CGI скрипты, или же могут использовать фреймворки – обертки для выбранного языка программирования, значительно упрощающие обработку запросов от клиентов сайта. В частности, Django – это и есть такая обертка для языка Python. В этом случае сервер по интерфейсу WSGI передает обработку запроса этому фреймворку, используется определенное представление, отвечающее за текущий запрос, и результатом обработки, как правило, является HTML-страница, которая сначала передается Web-серверу также по WSGI-интерфейсу, а он уже передает страницу конечному пользователю. Страница отображается в браузере клиента и он видит заветный сайт Youtube. Вот так в очень упрощенном виде происходит взаимодействие между пользователем, сервером и фреймворком.
WSGI (Web Server Gateway Interface) — стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера, и самим веб-сервером.
Отлично, теперь мы знаем, где находится фреймворк и за что он отвечает. Но как нам в домашних условиях, в учебных целях или целях разработки проекта запустить Django? Здесь есть хорошая новость. Во-первых, во всех современных компьютерах функционирует внутренняя сеть, которая называется:
Во-вторых, пакет Django в своем составе содержит отладочный Web-сервер, который можно запустить на домашнем ПК и проверить работу сайта, не используя сторонний сервер. Конечно, после полной разработки и отладки проекта сайты почти всегда размещаются на арендуемых серверах (хостингах) и уже там работают в боевом режиме.
Создание виртуального окружения
Давайте установим фреймворк Django на свой домашний компьютер. Здесь есть множество вариантов, мы воспользуемся наиболее распространенным – установим официальный релиз в новое виртуальное окружение (venv). Давайте я поясню, что означают эти «умные фразы». Как вы уже догадались, Django – это серьезный фреймворк и часто он взаимодействует с другими пакетами языка Python, да и сама версия Python может иметь значение. Так вот, чтобы все модули согласованно работали и выдавали ожидаемые результаты на запросы пользователей, желательно и на тестовом сервере и на реальном использовать одни и те же версии программных продуктов: начиная с выбранной версии Django и заканчивая определенной версией интерпретатора языка Python.
Но на компьютере уже могут присутствовать другие версии программных модулей или же их потребуется установить в будущем. Например, новую версию интерпретатора Python. Это может негативно сказаться на разрабатываемом проекте. Чтобы этого не происходило, как раз и создается виртуальное окружение, и все что установлено внутри него надежно изолируется от других окружений, в том числе и глобального. Мы именно так и поступим – создадим виртуальное окружение и разместим в нем текущую версию языка Python и фреймворка Django.
Для этого нам понадобится установленный интерпретатор Python в глобальном окружении и работа с командной строкой. Если Python у вас еще не установлен, то скачайте его с официального сайта:
Далее, я буду все показывать на примере ОС Windows, т.к. именно под ней работаю. На Linux и MacOS все происходит похожим образом, но есть отличия. Основные из них я буду отмечать по ходу изложения. Итак, чтобы работать с командной строкой Windows можно нажать комбинацию клавиш Win+R и в появившемся окне набрать команду cmd. Если все сделаете правильно, то появится вот такое консольное окно:
Но я воспользуюсь другой, более удобной бесплатной программой ConEmu, которую можно бесплатно скачать по адресу:
После установки и первого запуска в поле «Choose your startup task or even shell with arguments:» укажу
И после нажатия на кнопку «OK» увидим следующее окно:
Для проверки работоспособности интерпретатора Python наберем команду:
Если все работает, то должны увидеть текущую версию языка. Если этого не произошло, то, скорее всего, у вас не установлен Питон в глобальном окружении. Далее, с помощью команды:
Можно посмотреть список установленных пакетов опять же в глобальном окружении, т.к. мы именно в нем сейчас находимся.
Далее, я создам папку, в которой будет устанавливаться виртуальное окружение:
И в командной строке перейду в этот каталог:
Затем, выполняем команду:
для создания виртуального окружения с именем venv в текущей папке. (Если вы работаете под Linux, то соответственно пишете команду python3). Все, виртуальное окружение создано и мы видим дополнительную папку venv. Внутри нее имеются различные вложенные каталоги, которые и определяют содержимое данного окружения. Осталось его запустить. Находясь в папке D:/Python/django/djsite, выполним команду:
(Если вы работаете под Linux, то выполняется команда «source venv/bin/activate»). В действительности, мы запускаем исполняемый файл activate, который находится в подкаталоге \venv\Scripts\. В результате должна появиться надпись (venv), означающая, что мы находимся в виртуальном окружении с именем venv. Если теперь выполнить команду:
то увидим всего два пакета: сам pip и setuptools. То есть, это чистое виртуальное окружение, в котором два пакета и интерпретатор языка Python.
Сразу отмечу, чтобы выйти из виртуального окружения достаточно выполнить команду:
и мы возвращаемся в глобальное окружение.
Установка Django
Теперь у нас все готово для установки самого фреймворка Django в созданное виртуальное окружение. Так как я в своей работе использую интегрированную среду PyCharm, то дальнейшие действия по работе с виртуальным окружением буду делать через нее. Уверен, что большинство из вас тоже пользуются PyCharm, поэтому все должно быть предельно понятно. Итак, открываем созданный проект, указав папку:
и после индексирования всех файлов интегрированная среда автоматически активизирует установленное виртуальное окружение. Если это по каким-то причинам не произошло, то нужно вручную указать PyCharm это окружение. Для этого следует перейти на вкладку Project Interpreter:
и указать интерпретатор из установленного окружения.
Далее, находясь в корневой папке проекта, мы должны выполнить непосредственно установку Django с помощью очевидной команды:
pip install django
После этого в наше виртуальное окружение будет устанавливаться данный фреймворк со всеми необходимыми зависимостями. Если теперь выполнить команду:
то мы увидим последнюю рабочую версию Django и несколько дополнительных пакетов, необходимых для его работы.
Но это лишь ядро фреймворка с общим функционалом. Используя это ядро, мы можем создавать множество разных сайтов под управлением Django в рамках текущего виртуального окружения. Чтобы посмотреть список команд ядра, достаточно в терминале записать:
Так вот, для создания нашего первого сайта, нам понадобится команда startproject, которая записывается так:
Здесь «имя сайта», обычно, является доменным именем. Например, если мы собираемся располагать сайт на домене:
то в качестве имени логично выбрать coolsite. Давайте так и сделаем, выполним команду:
django-admin startproject coolsite
И фреймворк создал папку coolsite в рабочей папке проекта. Внутри этой папки имеется одноименная вложенная папка пакета, который определяет конфигурацию нашего сайта. Поэтому его часто так и называют – пакетом конфигурации. Также есть еще один отдельный файл manage.py, через который и производится управление данным сайтом. Например, мы будем создавать приложение, выполнять миграции БД, запускать тестовый веб-сервер и так далее. В действительности, это всего лишь своеобразная утилита, посредник, который передает наши команды django-admin и выполняет их «от лица» нашего сайта. Подробнее обо всем этом мы еще будем говорить.
Давайте теперь запустим тестовый веб-сервер на нашем локальном компьютере и убедимся, что созданный сайт работает. Для этого перейдем в папку coolsite:
и выполним файл manage.py с командой runserver:
python manage.py runserver
Происходит запуск локального Веб-сервера, который поставляется вместе с Django, и наш сайт должен быть доступен по адресу http://127.0.0.1:8000.
Преимущество отладочного сервера в том, что он автоматически перезапускается при изменении программы сайта. На практике это дает большое удобство. Но полностью полагаться на эту возможность не стоит, так как иногда Django все же игнорирует изменения, а точнее, новые дополнения, например, новые созданные файлы. Поэтому, если вы видите, что что-то работает не так, попробуйте просто перезапустить сервер вручную. Для его завершения достаточно нажать комбинацию клавиш:
Ctrl + Break (а также Ctrl + C в Windows)
а, затем, снова запустить:
python manage.py runserver
Также обратите внимание, что при первом запуске сервера в проекте появился еще один файл db.sqlite3 – файл БД SQLite3. Дело в том, что по умолчанию Django использует именно такую СУБД. В дальнейшем, мы можем это изменить и указать любую другую СУБД, которую поддерживает данный фреймворк. Это может быть:
PostgreSQL, MariaDB, MySQL, Oracle и SQLite
Но вернемся к запуску сервера. Его можно запускать также и со следующими параметрами:
python manage.py runserver 4000
python manage.py runserver 192.168.1.1:4000
Я, надеюсь, из этого занятия вы поняли, что из себя представляет фреймворк Django, как он устанавливается, как создать проект нового сайта и как проверить его работоспособность с помощью тестового веб-сервера.
Видео по теме
#2. Модель MTV. Маршрутизация. Функции представления
#3. Маршрутизация, обработка исключений запросов, перенаправления
#4. Определение моделей. Миграции: создание и выполнение
#6. Шаблоны (templates). Начало
#7. Подключение статических файлов. Фильтры шаблонов
#8. Формирование URL-адресов в шаблонах
#9. Создание связей между моделями через класс ForeignKey
#10. Начинаем работу с админ-панелью
#11. Пользовательские теги шаблонов
#12. Добавляем слаги (slug) к URL-адресам
#13. Использование форм, не связанных с моделями
#14. Формы, связанные с моделями. Пользовательские валидаторы
#15. Классы представлений: ListView, DetailView, CreateView
#16. Основы ORM Django за час
#18. Постраничная навигация (пагинация)
#19. Регистрация пользователей на сайте
#20. Делаем авторизацию пользователей на сайте
#21. Оптимизация сайта с Django Debug Toolbar
#22. Включаем кэширование данных
#23. Использование капчи captcha
#24. Тонкая настройка админ панели
#25. Начинаем развертывание Django-сайта на хостинге
#26. Завершаем развертывание Django-сайта на хостинге
© 2022 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Введение в Django
Что такое Django
Django был создан в 2005 году, когда веб-разработчики из газеты Lawrence Journal-World стали использовать Python в качестве языка для создания веб-сайтов. А в 2008 году вышел публичный первый релиз фреймворка. На сегодняшний день он продолжает развиваться. Так, текущей версией фреймворка на момент написания этой статьи является версия 4.1, которая вышла в августе 2022 года. Каждый новый релиз фреймворка выходит в средним каждые 8 месяцев. Кроме того, постоянно выходят обновления и исправления в бехопасности.
Django довольно популярен. Он используется на многих сайтах, в том числе таких, как Pinterest, PBS, Instagram, BitBucket, Washington Times, Mozilla и многих других.
Фреймворк является бесплатным. Он развивается как open source, его исходный код открыт, его можно найти репозитории на githube.
На Django можно создавать широкий диапазон веб-приложений: от небольших персональных сайтов до высоконагруженных сложных веб-сервисов.
Django по умолчанию предлагает готовую функциональность для ряда распространенных задач, например, систему аутентификации, генерацию карт сайта и т.д., благодаря чему нам можно не изобретать велосипед и достаточно взять уже готовые компоненты.
В Django большое внимание уделяется безопасности, благодаря чему фреймворк помогает разработчикам избежать многих распространенных проблем в системе безопасности, например, sql-инъекций.
Схематично мы можем представить архитектуру MVT в Django следующим образом:
Основные элементы паттерна:
URL dispatcher : при получение запроса на основании запрошенного адреса URL определяет, какой ресурс должен обрабатывать данный запрос.
View : получает запрос, обрабатывает его и отправляет в ответ пользователю некоторый ответ. Если для обработки запроса необходимо обращение к модели и базе данных, то View взаимодействует с ними. Для создания ответа может применять Template или шаблоны. В архитектуре MVC этому компоненту соответствуют контроллеры (но не представления).
Model : описывает данные, используемые в приложении. Отдельные классы, как правило, соответствуют таблицам в базе данных.
Template : представляет логику представления в виде сгенерированной разметки html. В MVC этому компоненту соответствует View, то есть представления.
Когда к приложению приходит запрос, то URL dispatcher определяет, с каким ресурсом сопоставляется данный запрос и передает этот запрос выбранному ресурсу. Ресурс фактически представляет функцию или View, который получает запрос и определенным образом обрабатывает его. В процессе обработки View может обращаться к моделям и базе данных, получать из нее данные, или, наоборот, сохранять в нее данные. Результат обработки запроса отправляется обратно, и этот результат пользователь видит в своем браузере. Как правило, результат обработки запроса представляет сгенерированный html-код, для генерации которого применяются шаблоны (Template).
Плюсы и минусы Django
Прим. перев.: Эта статья рассчитана в основном на тех кто только выбирает фреймворк для веб-разработки. Опытные разработчики на Django вряд ли узнают что-то новое.
Django описывают как «веб-фреймворк для перфекционистов с дедлайнами». Его создали, чтобы переходить от прототипов к готовым сервисам как можно быстрее.
Фреймворк поможет разработать CRUD приложение под ключ. С Django не придется изобретать велосипед. Он работает из коробки и позволит сосредоточиться на бизнес-логике и продуктах для обычных людей.
Плюсы Джанго
Принцип «Всё включено» («Batteries included»)
Фраза «всё включено» означает, что большинство инструментов для создания приложения — часть фреймворка, а не поставляются в виде отдельных библиотек.
Django содержит огромное количество функциональности для решения большинства задач веб-разработки. Вот некоторые из высокоуровневых возможностей Django, которые вам придётся искать отдельно, если вы предпочтёте микро-фреймворк:
Стандартизированная структура
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 продолжает обрастать возможностями.
Почему вам стоит выбрать фреймворк Django для своего следующего проекта
Django (Джанго) — свободный фреймворк для веб-приложений на языке Python, использующий шаблон проектирования MVC. Проект поддерживается организацией Django Software Foundation.
Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий фреймворка от некоторых других (например, Ruby on Rails). Один из основных принципов фреймворка — DRY (англ. Don’t repeat yourself)
Веб-фреймворк Django используется в сайтах Instagram, Disqus, Mozilla, The Washington Times, Pinterest, YouTube, Google и др.
Архитектура Django похожа на «Модель-Представление-Контроллер» (MVC). Контроллер классической модели MVC примерно соответствует уровню, который в Django называется Представление (англ. View), а презентационная логика Представления реализуется в Django уровнем Шаблонов (англ. Template). Из-за этого уровневую архитектуру Django часто называют «Модель-Шаблон-Представление» (MTV).
Основные возможности Django
Django Rest Framework для создания API
Django Rest Framework (DRF) — это библиотека, которая работает со стандартными моделями Django для создания гибкого и мощного API для проекта. Эта статья поможет понять структуру DRF и дать вводные данные для начала его использования
API DRF состоит из трёх слоев:
Когда не стоит использовать Django
Если все вышесказанное – не про ваш проект, то, вполне вероятно, Django вам подойдет.
Из личного опыта: идеальное применение Djnago для бэкенд разработки — написание бэкенда на хакатоне. Очень много встроенных фич и расширений, максимально удобная и быстрая разработка по сравнению с другими языками и фреймворками. Как мы знаем, на хакатоне время очень ограниченно.
Шпаргалка по Python для Django
В Python очень много полезных функций, библиотек и других элементов, перечислить которые в одном материале очень сложно. Мы поделимся базовой шпаргалкой по Python, которая ориентирована на создание веб-приложений с фреймворком Django. Сохраняйте статью в закладки, чтобы не потерять!
Этот набор инструкций напомнит вам об основных операциях с Django, если вы работаете над веб-проектом. Сюда входят такие действия, как установка Django, запуск проекта, работа с моделями, создание домашней страницы, использование шаблонов и создание учётных записей пользователей.
Шпаргалка предназначена для тех, кто уже знаком с Python, понимает, что такое виртуальное окружение, и имеет начальные знания о веб-разработке.
Что такое Django?
Django — веб-фреймворк для создания интерактивных веб-сайтов на Python. В Django вы определяете тип данных, с которыми ваш сайт должен работать, а затем указываете, как пользователи могут взаимодействовать с этими данными. Все описанные ниже действия актуальны для Django 3.0.
Установка Django
Лучше установить Django в виртуальном окружении — virtualenv или pipenv, где ваш проект будет изолирован от других. Большинство команд, приведённых ниже, предполагают, что вы работаете в виртуальной среде.
Django: первый взгляд¶
Поскольку Django разрабатывался в быстро развивающейся новостной среде, он был разработан для быстрого и простого выполнения общих задач веб-разработки. Вот неофициальный обзор того, как написать на Django веб-приложение с базой данных.
Проектирование модели¶
Хотя вы можете использовать Django без базы данных, он поставляется с объектно-реляционным отображением (ORM), в котором вы описываете структуру вашей базы данных в коде Python.
Синтаксис модели данных предлагает множество способов представления ваших данных. Это позволяет решать задачи по использованию различных БД. Вот быстрый пример:
Создание таблиц БД¶
Теперь запустите утилиты командной строки Django для автоматического создания таблиц:
Наслаждайтесь свободным API¶
Благодаря этому у вас есть бесплатный и мощный Python API для доступа к вашим данным. API создается на лету, генерация кода не требуется:
Динамический интерфейс администратора. Это не просто строительный материал, а целый дом¶
Идея такого решения заключается в том, что ваш сайт редактируется персоналом, или клиентом, или, может быть, только вами — и нет необходимости иметь дело с созданием внутренних интерфейсов только для управления контентом.
Один из типичных рабочих процессов при создании приложений Django — это создание моделей и максимально быстрый запуск сайта администрирования, чтобы сотрудники (или клиенты) могли начинать вводить данные. А в это время вы можете продолжать работу над публичной частью проекта.
Проектирование URL¶
Приведенный выше код сопоставляет пути URL с функциями Python («views»). Строки пути используют теги параметров для «захвата» значений из URL. Когда пользователь запрашивает страницу, Django пробегает каждый путь по порядку и останавливается на первом, который соответствует запрошенному URL. (Если ни один из них не совпадает, Django вызывает специальное представление 404.) Это невероятно быстро, потому что пути компилируются в регулярные выражения во время загрузки.
Когда один из шаблонов URL совпадает, Django вызывает заданное представление (напоминаем, что это обычная функцией Python). Каждое представление получает объект запроса, который содержит метаданные запроса, и значения, захваченные в шаблоне URL.
Написание представлений¶
Как правило, представление извлекает данные в соответствии с параметрами, загружает шаблон и отображает шаблон с полученными данными. Вот пример представления для year_archive :
В этом примере используется система шаблонов Django, которая имеет мощные возможности, но старается оставаться достаточно простой для использования непрограммистами.
Создание шаблонов¶
Допустим, шаблон news/year_archive.html был найден. Вот как это может выглядеть:
Переменные окружены двойными фигурными скобками. << article.headline >> означает «Вывести значение заголовка статьи». Но точки используются не только для поиска атрибутов. Они также могут выполнять поиск по словарю, поиск по индексу и вызовы функций.
Примечание: << article.pub_date|date:"F j, Y" >> использует «pipe» в стиле Unix (символ «|»). Это называется фильтром шаблона, т.е. способ фильтрации значения переменной. В этом случае фильтр даты форматирует объект даты и времени Python в заданном формате (как в функции даты в PHP).
Наконец, Django использует концепцию «наследования шаблонов». Это выполняется с помощью <% extends "base.html" %>и означает: «Сначала загрузите шаблон с именем «base», который определяет группу блоков, и заполните блоки следующими блоками». Короче говоря, это позволяет значительно сократить избыточность в шаблонах: каждый шаблон должен определять только то, что уникально для этого шаблона.
Вот как может выглядеть шаблон «base.html», включая использование статических файлов :
Упрощенно, он определяет внешний вид сайта (с логотипом сайта) и предоставляет «места» для заполнения дочерними шаблонами. Это делает редизайн сайта таким же простым, как и изменение одного файла — базового шаблона.
Он также позволяет создавать несколько версий сайта с различными базовыми шаблонами, одновременно используя дочерние шаблоны. Создатели Django использовали эту технику для создания совершенно разных мобильных версий сайтов — просто создав новый базовый шаблон.
Обратите внимание, что нет необходимости использовать систему шаблонов Django, если вы предпочитаете другую систему. Хотя система шаблонов Django особенно хорошо интегрирована со слоем моделей Django, ничто не заставляет вас использовать ее. В этом отношении вам также не нужно использовать API базы данных Django. Вы можете использовать другой уровень абстракции базы данных, вы можете читать файлы XML, вы можете читать файлы с диска или что угодно. Каждая часть Django — модели, виды, шаблоны — отделена от следующей.
Это только общие сведения¶
Это был только краткий обзор функциональности Django. Еще несколько полезных функций:
Следующими шагами для вас будут загрузка и установка Django, чтение учебника и присоединение к сообществу. Спасибо за ваш интерес!