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

Что такое веб-фреймворк?

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

Итак, что такое Django и для чего он нужен?

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

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

Слышал ли я о чем-нибудь, что построено на Django?

Да, наверное, да. Pinterest - это распределенная система Django с очень высоким трафиком. Веб-приложение Instagram написано на Django. The Washington Post, Rdio, The Onion и NASA также используют Django. Вы, наверное, почувствовали здесь какую-то тему. Эти ребята отвечают за сложные, очень загруженные и крупномасштабные системы - и все они делают это очень хорошо (или, по крайней мере, так кажется!). Bitbucket и EventBrite также работают на Django (и на самом деле текущая команда EventBrite состоит из нескольких основных разработчиков Django).

Итак, как это выглядит с технической стороны?

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

Программы

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

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

Модели

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

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

Взгляды

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

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

URL

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

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

Шаблоны

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

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

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

Система администрирования

Система автоматического администрирования Django очень полезна - в основном из-за экономии времени. Это работает так: любое созданное вами приложение имеет собственный соответствующий файл администратора. Импортировать соответствующие модели базы данных в этот файл, а затем диктовать, как вы хотите, чтобы эти поля были размещены визуально, - это все, что вам нужно сделать для создания системы администрирования, потому что Django возьмет эти компоненты и сделает их доступными для администратора (по умолчанию в URL-адрес / admin).

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

Итак, как мне начать работу с Django?

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

Чтобы продемонстрировать простоту Django, мы собираемся создать простое приложение для ведения блога. (Окончательный исходный код доступен здесь: https://github.com/danielsamuels/gcbv-article/)

Для начала вам потребуется установить Python, он предустановлен в системах на базе OS X и Linux, поэтому, если вы используете любой из них, у вас уже должен быть установлен. Если вы работаете в Windows, вам нужно будет перейти на веб-сайт Python, чтобы загрузить и установить его. Перед установкой Django мы собираемся создать нечто, называемое «виртуальной средой». Виртуальная среда позволяет нам изолировать зависимости проекта от остальной части вашей системы, чтобы вам не приходилось одновременно загружать несколько версий одной и той же библиотеки. Чтобы начать использовать виртуальную среду под Python 2, вам необходимо сначала установить пакет: pip install virtualenv. Если вы используете Python 3, он поставляется со встроенной системой виртуальной среды, поэтому мы будем ее использовать.

Чтобы создать виртуальную среду на Python 2, запустите `virtualenv .venv`, для создания виртуальной среды на Python 3 используйте` python3 -m venv .venv`. После создания среды ее необходимо активировать, прежде чем ее можно будет использовать. Вы можете сделать это, запустив `. .venv / bin / activate`.

Теперь мы все настроены и готовы к установке Django, не влияя ни на что другое - просто запустите `pip install Django`. Последняя версия будет загружена и установлена. Чтобы начать использовать Django, нам сначала нужно создать проект, Django предоставляет базовый шаблон, поэтому мы воспользуемся им. Запустите `django-admin startproject blog`. Если вы просмотрите этот каталог, вы увидите, что было создано несколько новых файлов, которые составят основу нашего проекта.

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

Что делает каждый из этих файлов?

При запуске startproject создается 4 файла: manage.py, settings.py, urls.py и wsgi.py.

Файл manage.py является заменой команды django-admin, которую мы использовали ранее, это ваша основная точка входа в ваше приложение и то, что мы используем для выполнения любых команд управления, связанных с нашим проектом, например, для создания пользователя с правами администратора. Очень редко вам нужно редактировать этот файл.

Файл settings.py содержит все настройки для нашего проекта, такие как имя проекта, URL-адрес, по которому он будет жить, и так далее. Мы не будем редактировать его в рамках этого процесса, но его стоит просмотреть, чтобы увидеть, что там есть.

Urls.py - это базовый файл маршрутизации для всех запросов, поступающих в Django, он обрабатывает сопоставление различных URL-адресов с соответствующими представлениями. Мы будем редактировать его позже.
Файл wsgi.py используется при развертывании проекта на сервере. Он позволяет серверу WSGI HTTP, такому как Gunicorn, монтировать ваше приложение и передавать HTTP-запросы.

Строим это

Теперь, когда у нас есть первые файлы для нашего проекта, мы приступим к его созданию. Чтобы наше рабочее пространство оставалось чистым, мы собираемся создавать файлы приложения в папке в нашем проекте, а не вместе со всем остальным, поэтому создайте папку под названием «блог». Вам также необходимо создать в этой папке пустой файл с именем __init__.py, чтобы Python знал, что это загружаемый модуль. Когда у нас будет эта папка, нам нужно будет создать внутри нее файл «models.py», который будет содержать наше представление сообщения в блоге. Мы сохраним простоту и пока будем включать только заголовок и содержание.

из django.db import models class Post (models.Model): title = models.CharField (max_length = 100,) content = models.TextField ()

Затем нам понадобятся отдельные «представления», которые позаботятся о получении запроса, выяснении того, что нужно сделать, а затем возвращении веб-страницы. Для этого мы будем использовать «Общие представления на основе классов» Django, которые обеспечивают простой способ выполнения стандартных задач. Создайте views.py в папке вашего блога со следующим содержимым:

из django.core.urlresolvers импортировать обратный из django.views.generic импортировать CreateView, DeleteView, DetailView, ListView, UpdateView из .models импортировать Post class PostListing (ListView): model = Post class PostCreate (CreateView): model = Post success_url = ' / '
fields = [' title ',' content '] class PostDetail (DetailView): model = Post class PostUpdate (UpdateView): model = Post
fields = [' title ',' content '] def get_success_url (self): return reverse ('blog: detail', kwargs = {'pk': self.object.pk,}) class PostDelete (DeleteView): model = Post success_url = '/'

Последний файл, который нам понадобится в папке приложения, - urls.py. Это сопоставит URL-адрес, который вы посещаете в своем браузере, с соответствующим представлением в файле views.py. Мы собираемся использовать некоторые регулярные выражения для сопоставления значений в URL-адресе, все, что они собираются делать, это искать число и передавать его в представление как значение pk - первичный ключ, который будет использоваться для поиска сообщение в блоге в базе данных.

from django.conf.urls импортировать url-адрес из .views import PostCreate, PostDelete, PostDetail, PostListing, PostUpdate urlpatterns = [url (r '^ $', PostListing.as_view (), name = 'листинг'), url (r '^ create / $ ', PostCreate.as_view (), name =' create '), url (r' ^ (? P ‹pk› \ d +) / $ ', PostDetail.as_view (), name =' detail '), URL-адрес (r '^ (? P ‹pk› \ d +) / update / $', PostUpdate.as_view (), name = 'update'), url (r '^ (? P ‹pk› \ d +) / delete / $ ', PostDelete.as_view (), name =' delete '),]

Прежде чем наше приложение будет интегрировано в наш проект, нам нужно сделать несколько мелких вещей. Для начала нам нужно добавить приложение в список установленных приложений в настройках. Итак, откройте settings.py и найдите INSTALLED_APPS. Добавьте еще одну строку со значением «blog.blog» (блог - это имя папки проекта, а также имя папки приложения). Последнее, что нам нужно сделать, это добавить URL-адреса блога к URL-адресам проекта. Откройте urls.py в корне вашего проекта и добавьте эту строку под строкой администратора:

url (r ’^’, include (‘blog.blog.urls’, namespace = ”blog”))

Вам также необходимо добавить `include` в список импорта из django.conf.urls.

из django.conf.urls import include, url

Теперь нам нужно сообщить Django о нашей новой модели статьи, чтобы он знал, что ему нужно создать таблицу базы данных. Вернитесь к своему терминалу и запустите блог python manage.py makemigrations. Вы увидите, как создается файл. Затем запустите python manage.py migrate, он превратит все модели в вашем проекте в таблицы базы данных. Теперь у вас должно быть все готово для запуска сервера разработки, поэтому запустите `python manage.py runserver`. Вы увидите, что сервер запустится и направит вас к https://127.0.0.1:8000, который вы затем сможете посетить.

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

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

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

шаблоны / блог / post_confirm_delete.html

‹Form action =” ”method =” post ”›
{% csrf_token%}
‹input type =” submit ”›
‹/form›

шаблоны / блог / post_detail.html

‹H1› {{post.title}} ‹/h1›
‹p› {{post.content}} ‹/p›

шаблоны / блог / post_form.html

‹Form action =” ”method =” post ”›
{% csrf_token%}
{{form.as_p}}
‹input type =” submit ”›
‹/ форма>

шаблоны / блог / post_list.html

‹Ul›
{% за сообщение в post_list%}
‹li› ‹a href='{% url “blog:detail ”post.pk %}'› {{post.title}}‹ / a ›‹/li›
{% endfor%}
‹/ul›

Ваша окончательная структура должна выглядеть так:

__init__.py
models.py
urls.py
views.py
templates / blog / post_confirm_delete.html
templates / blog / post_detail.html
templates / blog / post_form.html
templates / blog / post_list.html

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

Быстрые советы
• Если вы собираетесь работать над несколькими проектами Python / Django, полезно использовать виртуальные среды для изоляции ваших зависимостей. Вы можете запустить `pip install virtualenv`,` virtualenv .venv`, `. .venv / bin / activate`, чтобы начать.
• Python поставляется с полезной программой для установки зависимостей, она называется «pip». Вы можете установить Django, запустив `pip install Django`. Если вы хотите поделиться своими требованиями, вы можете запустить `pip freeze› requirements.txt`, а кто-то другой может запустить `pip install -r requirements.txt` для их установки.
• Проекты Django работают лучше всего, когда они разделены на управляемые части, поэтому рассмотрите возможность разделения различных частей вашего проекта на отдельные приложения, а затем разделение отдельных компонентов приложения в отдельный файл. Вы обнаружите, что поддерживать его становится намного проще.

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

Когда вы запустите сервер разработки в первый раз и перейдете на https://127.0.0.1:8000, вы увидите эту страницу.

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

Абстрагирование от сложности

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