Содержание
Django введение — Изучение веб-разработки
- Обзор: Django
- Далее
В первой статье о Django мы отвечаем на вопрос «Что такое Django?» и даём обзор того, что делает его особенным. Мы опишем основные функции, в том числе некоторые из расширенных функций, которые у нас не будет времени подробно рассмотреть в этом модуле. Мы также покажем вам некоторые основные строительные блоки приложения Django (хотя на данный момент у вас ещё не будет среды разработки для тестирования).
Требования: | Базовая компьютерная грамотность. Общее понимание server-side website programming, и в частности, механики client-server interactions in websites. |
---|---|
Задача: | Узнать, что такое 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) (en-US)).
- Переносным
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 превратился в универсальный фреймворк, способный разрабатывать веб-сайты любого типа.
Нет никаких доступных и окончательных оценок популярности серверных фреймворков (хотя сайты наподобие 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 означает, что вы обычно можете выбирать из нескольких различных опций или при необходимости добавлять поддержку для совершенно новых.
На традиционном информационном веб-сайте веб-приложение ожидает HTTP-запросы от веб-браузера (или другого клиента). Когда запрос получен, приложение разрабатывает то, что необходимо на основе URL-адреса и, возможно, данных в POST
или GET
запросах. В зависимости от того, что требуется, далее он может читать или записывать информацию из базы данных или выполнять другие задачи, необходимые для удовлетворения запроса. Затем приложение вернёт ответ веб-браузеру, часто динамически создавая HTML-страницу для отображения в браузере, вставляя полученные данные в HTML-шаблон.
Веб-приложения, написанные на Django, обычно группируют код, который обрабатывает каждый из этих шагов, в отдельные файлы:
- URLs: Хотя можно обрабатывать запросы с каждого URL-адреса с помощью одной функции, гораздо удобнее писать отдельную функцию для обработки каждого ресурса. URL-маршрутизатор используется для перенаправления HTTP-запросов в соответствующее представление на основе URL-адреса запроса. Кроме того, URL-маршрутизатор может извлекать данные из URL-адреса в соответствии с заданным шаблоном и передавать их в соответствующую функцию отображения (view) в виде аргументов.
- View: View (англ. «отображение») — это функция обработчика запросов, которая получает HTTP-запросы и возвращает ответы. Функция view имеет доступ к данным, необходимым для удовлетворения запросов, и делегирует ответы в шаблоны через модели.
- Models: Модели представляют собой объекты Python, которые определяют структуру данных приложения и предоставляют механизмы для управления (добавления, изменения, удаления) и выполнения запросов в базу данных.
- Templates: Template (англ. «шаблон») — это текстовый файл, определяющий структуру или разметку страницы (например HTML-страницы), с полями для подстановки, которые используются для вывода актуального содержимого. View может динамически создавать HTML-страницы, используя HTML-шаблоны и заполняя их данными из модели (model). Шаблон может быть использован для определения структуры файлов любых типов, не обязательно HTML.
Примечание: Django реализует уровневую архитектуру «Model View Template (MVT)». Она имеет много общего с более известной архитектурой Model View Controller.
Следующие разделы дадут вам понимание того, как выглядят основные части Django (мы их изучим более детально чуть позже на курсе, когда будет настраивать окружение разработчика).
Отправка запроса в правильное view (urls.py)
Сопоставитель URL-адресов обычно содержится в файле urls.py. В примере ниже сопоставитель (urlpatterns
) определяет список сопоставлений междумаршрутами (определёнными URL-шаблонами) и соответствующими функциями отображения (view). Если получен HTTP-запрос, который имеет URL-адрес, соответствующий определённому шаблону, то затем будет вызвана связанная функция отображения (view) и передана в запрос. ([0-9]+)/$’, views.best),
]
Объект urlpatterns
является списком функций path()
и/или re_path()
(в Python списки определяются с помощью квадратных скобок, внутри которых элементы разделены запятыми и могут содержать необязательную завершающую запятую. Например: [item1, item2, item3,]
).
Первый аргумент в обоих методах — маршрут (шаблон), который будет сопоставлен. В методе path()
угловые скобки используются для определения частей URL-адреса, которые будут захвачены и переданы в функцию отображения (view) в качестве именованных аргументов. Функция re_path()
использует гибкий подход к сопоставлению с шаблоном, известный как регулярное выражение. Мы поговорим об этом в следующей статье!
Второй аргумент — это ещё одна функция, которая будет вызываться при сопоставлении шаблона. Обозначение views.book_detail
указывает, что функция называется book_detail()
и может быть обнаружена в модуле с именем views
(т. е. внутри файла с именем views.py
).
Обработка запроса (views.py)
Отображения (views) — это сердце веб-приложения, принимающего HTTP-запросы от веб-клиентов и возвращающего HTTP-ответы. Между этим они используют другие ресурсы фреймворка для доступа к базам данных, шаблонам визуализации и т. д.
В приведённом ниже примере показана минимальная функция представления index()
, которая могла быть вызвана нашим сопоставителем URL-адресов в предыдущем разделе. Как и все функции отображения (view), она получает объект HttpRequest
в качестве параметра (request
) и возвращает объект HttpResponse
. В этом случае мы ничего не делаем с запросом, и наш ответ просто возвращает жёстко запрограммированную строку. Мы покажем вам запрос, который делает что-то более интересное в следующем разделе.
## filename: views.py (Django view functions) from django.http import HttpResponse def index(request): # Получить HttpRequest — параметр запроса # Выполнить операции, используя информацию из запроса. # Вернуть HttpResponse return HttpResponse('Hello from Django!')
Примечание: Немного Python:
- Модули Python это библиотеки функций, сохранённые в различных файлах, которые мы можем использовать в нашем коде. Здесь мы импортируем только объект
HttpResponse
из модуляdjango.http
чтобы использовать его в нашем отображении (view):from django.http import HttpResponse
. Также есть другие способы импортирования некоторых или всех объектов модуля. - Функции объявляются с помощью ключевого слова
def
, как показано выше, с именованными параметрами, перечисленными в скобках после имени функции; строка завершается двоеточием. Заметьте, что следующие строки содержат отступы. Отступы важны, так как они определяют, какие строки кода находятся внутри конкретного блока (обязательные отступы — это ключевая особенность Python и одна из причин, почему код на Python так легко читать).
Отображения (view) обычно содержатся в файле views. py.
Определение данных модели (models.py)
Веб-приложения Django обрабатывают и запрашивают данные через объекты Python, называемые моделями. Модели определяют структуру хранимых данных, включая типы полей и, возможно, их максимальный размер, значения по умолчанию, параметры списка выбора, текст справки для документации, текст меток для форм и т. д. Определение модели не зависит от используемой базы данных — ваши модели будут работать в любой из них. После того как вы выбрали базу данных, которую хотите использовать, вам не нужно напрямую обращаться к ней — вы просто пишете свою структуру модели и другой код, а Django выполняет всю «грязную работу» по обращению к базе данных за вас.
В приведённом ниже фрагменте кода показана очень простая модель Django для объекта Team
. Класс Team
наследуется от класса models.Model
. Он определяет имя команды и командный уровень в качестве полей символов и задаёт максимальное количество символов, которые могут быть сохранены для каждой записи. Team_level
может быть одним из нескольких значений, поэтому мы определяем его как поле выбора и предоставляем сопоставление между отображаемыми вариантами и хранимыми данными вместе со значением по умолчанию.
# filename: models.py from django.db import models class Team(models.Model): team_name = models.CharField(max_length=40) TEAM_LEVELS = ( ('U09', 'Under 09s'), ('U10', 'Under 10s'), ('U11', 'Under 11s'), ... #список других командных уровней ) team_level = models.CharField(max_length=3,choices=TEAM_LEVELS,default='U11')
Примечание: Немного Python:
- Python поддерживает «объектно-ориентированное программирование», то есть стиль программирования, в котором мы организуем наш код в объекты, которые включают связанные данные и функции для работы с этими данными. Объекты также могут наследовать / расширять / выводить из других объектов, позволяя использовать одинаковое поведение между связанными объектами. В Python мы используем ключевое слово
class
, чтобы определить «скелет» для объекта. Мы можем создать несколько конкретных экземпляров типа объекта на основе модели в классе.
Так, например, мы имеем классTeam
, который происходит от классаModel
. Это означает, что эта модель будет содержать все методы модели, но мы также можем дать ей специализированные возможности. В нашей модели мы определяем поля нашей базы данных, в которой будем хранить данные, присваивая им конкретные имена. Django использует эти определения, включая имена полей, для создания основной базы данных.
Запросы данных (views.py)
Модель Django предоставляет простой API запросов для поиска в базе данных. Поиск может осуществляться по нескольким полям одновременно, используя различные критерии (такие как exact («точный»), case-insensitive («без учёта регистра»), greater than («больше чем») и т. д.), и может поддерживать сложные выражения (например, вы можете указать поиск в командах U11, у которых есть имя команды, начинающееся с «Fr» или заканчивается на «al»).
Фрагмент кода показывает функцию view (обработчик ресурсов) для отображения всех команд U09. Выделенная жирным строка показывает, как мы можем использовать модель API-запросов для того, чтобы отфильтровать все записи, где поле team_level
в точности содержит текст ‘U09’ (обратите внимание, как эти критерии передаются функции filter()
в качестве аргумента с именем поля и типом соответствия, разделённым двойным подчёркиванием: team_level__exact
).
## filename: views.py from django.shortcuts import render from .models import Team def index(request): list_teams = Team.objects.filter(team_level__exact="U09") context = {'youngest_teams': list_teams} return render(request, '/best/index.html', context)
Данная функция использует функцию render()
для того, чтобы создать HttpResponse
, который будет отправлен назад браузеру. Эта функция является ярлыком; она создаёт HTML-файл, комбинируя указанный HTML-шаблон и некоторые данные для вставки в шаблон (предоставляется в переменной с именем «context
»). В следующем разделе мы покажем как данные вставляются в шаблон для создания HTML-кода.
Вывод данных (HTML-шаблоны)
Системы шаблонов позволяют указать структуру выходного документа, используя заполнители для данных, которые будут вставлены при генерировании страницы. Шаблоны часто используются для создания HTML, но также могут создавать другие типы документов. Django «из коробки» поддерживает как собственную систему шаблонов, так и другую популярную библиотеку Python под названием Jinja2 (она также может быть использована для поддержки других систем, если это необходимо).
Фрагмент кода показывает, как может выглядеть HTML-шаблон, вызванный функцией render()
из предыдущего раздела. Этот шаблон был написан с предположением, что во время отрисовки он будет иметь доступ к переменной списка, названной youngest_teams
(содержащейся в контекстной переменной внутри функции render()
выше). Внутри скелета HTML мы имеем выражение, которое сначала проверяет, существует ли переменная youngest_teams
, а затем повторяет её в цикле for
. При каждом повторе шаблон отображает значение team_name
каждой команды в элементе
.<li>
## filename: best/templates/best/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Home page</title> </head> <body> {% if youngest_teams %} <ul> {% for team in youngest_teams %} <li>{{ team.team_name }}</li> {% endfor %} </ul> {% else %} <p>No teams are available.</p> {% endif %} </body> </html>
В предыдущих разделах показаны основные особенности, которые вы будете использовать почти в каждом веб-приложении: сопоставление URL-адресов, отображение, модели и шаблоны. Также Django предоставляет несколько других вещей:
- Формы: HTML-формы используются для сбора пользовательских данных для обработки на сервере. Django упрощает создание, проверку и обработку формы.
- Аутентификация пользователя и разрешения: Django включает надёжную систему аутентификации и авторизации пользователей, которая была построена с учётом безопасности.
- Кеширование: Создание динамического контента намного более интенсивно (и медленнее), чем обслуживание статического содержимого. Django обеспечивает гибкое кеширование, чтобы вы могли хранить всю или часть отображаемой страницы, для того, чтобы она не вызывалась повторно, за исключением случаев, когда это необходимо.
- Админ-панель: Административная панель в Django включена по умолчанию при создании приложения с использованием основного каркаса. Это упрощает управление админкой администраторам сайта для создания, редактирования и просмотра любых данных на вашем сайте.
- Сериализация данных (преобразование в последовательную форму): Django упрощает сериализацию и обслуживание ваших данных в таких форматах как XML или JSON. Это может быть полезно при создании веб-сервисов (веб-сайтов, которые исключительно служат для использования данных другими приложениями или сайтами и сами ничего не отображают) или при создании веб-сайта, на котором клиентский код обрабатывает весь рендеринг данных.
Поздравляем, вы завершили первый шаг в своём путешествии по Django! Теперь вы должны понимать основные преимущества Django, немного его истории, и примерно как может выглядеть каждая из основных частей приложения Django. Вы должны также изучить несколько вещей о языке программирования Python, включая синтаксис списков, функций и классов.
Вы уже видели код на Django выше, но в отличие от клиентского кода вам нужно настроить среду разработки для её запуска. Это наш следующий шаг.
- Обзор: Django
- Далее
Last modified: , by MDN contributors
Django: архитектура, разработка и возможности
Определение 1
Django — это весьма популярный мощный свободный фреймворк для веб-приложений на языке Python, который использует шаблон проектирования MVC
Введение
Django является одним из лучших веб-фреймворков, написанных на Python. Данным инструментом удобно пользоваться при разработке сайтов, которые работают с базами данных. Django был создан разработчиками издания Lawrence-Journal World. Данной газете потребовался сайт для публикации новостей в интернете. Программисты Эдриан Головатый и Саймон Виллисон смогли создать веб-приложение и сделать его публичным.
Вокруг Django было оперативно сформировано активное сообщество. Фреймворк получил стремительное развитие усилиями волонтеров. Существенную роль в успехе Django смогли сыграть несколько известных сайтов, использовавших данный фреймворк. Основными из них были Pinterest, Dropbox, Spotify, сайт The Washington Post. На сегодняшний день сообщество Django имеет в своем составе более одиннадцати тысяч разработчиков из ста шестидесяти шести государств мира.
Архитектура и функциональные возможности Django
В Django используется принцип DRY (don’t repeat yourself), то есть «не повторяй себя», что позволяет сократить время формирования. Это означает, что при использовании Django пользователю нет необходимости по несколько раз переписывать одни и те же коды, так как фреймворк предоставляет возможность создания сайтов из компонентов. Это похоже на строительство крепости при помощи Lego.
Django пригоден для проектирования веб-приложений, имеющих высокую загруженность. Это стало возможным благодаря использованию архитектуры фреймворка. Фреймворк Django был сформирован на языке программирования Python, поэтому его структурная организация соответствует особенностям этого языка. Проектировщики задействовали в Django шаблон MVC (Model-View-Controller, то есть, «Модель-Представление-Контроллер»), и он используется в текущем варианте фреймворка.
Архитектура MVC дает возможность разработчикам использовать визуальное представление и бизнес-логику приложения по отдельности. Следует отметить, что при работе с Django проектировщики более часто применяют термин MVT (Model-View-Template), то есть, модель-представление-шаблон. Компоненты MVT могут быть использованы независимо друг от друга. На рисунке ниже представлена схема архитектуры MVT в Django.
Рисунок 1. Схема архитектуры MVT в Django. Автор24 — интернет-биржа студенческих работ
Документация Django должна определять модель (model) в качестве источника информации о данных, в которых содержатся ключевые поля и поведение данных. Как правило, одна модель отображает одну таблицу в базе данных. Платформа Django способна поддерживать базы данных PostgreSQL, MySQL, SQLite и Oracle.
В моделях содержится информация о данных, которые представлены атрибутами или полями. Так как модель является простым классом, то ей ничего не известно о других уровнях Django. Взаимодействие между уровнями осуществляется через API. Модель определяет бизнес-логику, методы, свойства и другие компоненты, сопряженные с манипуляцией данными. Помимо этого, модели предоставляют разработчикам возможность создания, чтения, обновления и удаления объектов в базе данных.
Представление (view) способно решать следующие задачи:
- Прием HTTP-запросов.
- Реализация бизнес-логики, определенной методами и свойствами.
- Отправка HTTP-ответа в ответ на запросы.
Таким образом, представление должно получать данные от модели и предоставлять шаблонам (templates) доступ к этим данным или предварительно обрабатывать данные и затем предоставлять к ним доступ шаблонам. В Django имеется мощная поддержка шаблонов и собственный язык разметки. Шаблоны являются файлами с HTML-кодом, при помощи которого могут отображаться данные. Содержимое файлов может быть, как статическим, так и динамическим. Шаблоны не могут содержать бизнес-логику, поэтому они лишь отображают данные. На рисунке ниже изображен пример шаблона страницы.
Рисунок 2. Шаблон страницы. Автор24 — интернет-биржа студенческих работ
Данная архитектура предоставляет возможность Django успешно решать следующие задачи:
- Формирование движков для сайтов.
- Реализация систем CRM (Customer Relationship Management), то есть, систем управления отношениями с клиентами.
- Выполнение машинного обучения (machine learning).
Некоторые специалисты полагают, что Django является одной из многих систем управления контентом (CMS). Но в реальности Django является программным инструментом, при помощи которого обеспечивается возможность создания и запуска веб-приложения.
Программная платформа Django способна справиться с большим количеством задач и повышенными нагрузками. Ее используют для того, чтобы создать:
- Системы CRM.
- Системы CMS.
- Различные коммуникационные платформы.
- Сервисы бронирования номеров.
- Платформы управления документооборотом.
Помимо этого, Django может использоваться для формирования алгоритмических генераторов, платформ, предназначенных для электронных рассылок, систем верификации, систем фильтрации с динамическими правилами и сложными параметрами, платформ для анализа данных и сложных вычислений, машинного обучения.
Уже многие тысячи сайтов в разных государствах мира реализованы на платформе Django. Данная программная платформа может отлично подойти для разработки веб-приложений. Одним из основных достоинств Django считается развитая экосистема. Опытные разработчики советуют воспринимать Django как систему. Это означает, что фреймворк обычно применяется с большим числом сторонних приложений. Они могут выбираться в зависимости от потребностей каждого проекта.
В Django существует целый набор типовых блоков. К примеру, блок авторизации или блок подписки на рассылку используется фактически в каждом проекте. Сформированные при помощи Django веб-приложения составлены обычно из таких независимых блоков.
Архитектура Django — Подробное объяснение
Содержание
show
- Что такое Django?
- Django Architecture
- Модель
- View
- Контроллер
- Django MTV Pattern
- Особенности Django
- Преимущества Django Architecture
- Заключение
- . фреймворк приложения, написанный на Python. Он используется для быстрой веб-разработки и чистого прагматичного дизайна. Он создан опытными разработчиками для упрощения повторяющихся задач, поэтому мы можем сосредоточиться на написании приложений, а не изобретать велосипед. Django был создан в 2003 году, когда веб-разработчики из газеты Lawrence Journal-World начали использовать Python для своей веб-разработки. После создания ряда веб-сайтов они начали выделять и повторно использовать множество общих кодов и шаблонов проектирования. Этот общий код привел к универсальной среде веб-разработки, которая была открыта как проект «Django» в 2005 году. Поскольку первоначальные разработчики были окружены журналистами, хорошо написанная документация является ключевой частью Django. Это означает, что на страницах официальной документации Django есть отличные ссылки для ознакомления. Фреймворк Django чрезвычайно велик, но сообщество Django просто огромно. Сообщество предоставило много стороннего кода для Django. Независимо от того, что мы пытаемся сделать, есть большая вероятность, что мы найдем решение для этого на djangopackages.org. Веб-сайт включает в себя все: от аутентификации и авторизации до полнофункциональных систем управления контентом на базе Django, от надстроек для электронной коммерции до интеграции с Stripe.
Мы также обсудим преимущества Django MVC и какие шаблоны лучше всего подходят в той или иной ситуации. Мы также узнаем, как структурировать наш проект Django с помощью MVC и какие шаблоны лучше всего подходят для этого. Мы также рассмотрим лучшие практики для каждого из этих компонентов и приведем примеры того, как структурировать ваш проект с помощью MVC.
Что такое Джанго?
Django чаще всего используется для веб-разработки, но его можно использовать и для многих других целей. Это высоко оцененное программное обеспечение, которое настоятельно рекомендуется всем, кто серьезно относится к веб-разработке. Его можно использовать для создания крупных веб-сайтов электронной коммерции, блогов или всего, что требует масштабируемого высокопроизводительного веб-сайта. В этой статье мы рассмотрим все основы, которые вам нужно знать, чтобы начать работу с Django. Мы рассмотрим такие темы, как настройка среды разработки, установка и использование Django. Мы также расскажем, как выбрать правильную установку Django для ваших нужд и как получить максимальную отдачу от фреймворка, используя лучшие практики. К концу статьи вы будете уверенно использовать Django для создания своих веб-сайтов. Вы также получите хорошее представление о том, как Django влияет на производительность вашей команды и как его можно использовать для других целей.
Не знаете, что делать дальше?
Выполнив 3 простых шага, вы сможете БЕСПЛАТНО найти свой персональный карьерный план в области разработки программного обеспечения. Его очень легко изучить и установить, и он не требует никаких внешних инструментов или библиотек. Его можно использовать для создания любого типа веб-приложений или мобильных приложений, от самых простых до самых сложных. Django часто упоминается как «лучшая практика» разработки приложений, потому что она имеет согласованную структуру, предоставляет все, что может понадобиться разработчикам, и очень проста в использовании.
- Эта гибкость делает Django таким популярным выбором для создания веб-сайтов. Его легко освоить, легко реализовать, и его можно расширить с помощью огромного набора инструментов и библиотек. С его помощью также очень быстро создать веб-сайт, который можно запустить и запустить за считанные дни.
- Еще одна важная функция безопасности, предоставляемая Django, — это возможность определять, какие шаблоны должны иметь доступ к каким моделям. Это известно как «привязка модели» и позволяет вам ограничить доступ определенного шаблона к определенному типу модели, например. включать данные только о сотрудниках в модель MyEmployees. В дополнение к привязке модели Django предоставляет множество других функций безопасности, таких как управление сеансами, ограничение того, какие модели могут просматривать данную страницу, автоматическое создание объектов и многое другое. Django использует встроенную функцию password_hash() для создания хэша для заданного пароля. Эта функция принимает один целочисленный параметр — длину хеш-функции в битах (список поддерживаемых хэш-функций см. в разделе «Хеш-функции»). Значение фиксированной длины создается путем хеширования пароля, а затем умножения результата хеширования на длину пароля для получения окончательного значения. Это хорошая практика, поскольку она обеспечивает уровень защиты от злонамеренно созданных хэшей и позволяет создавать пользовательские хэш-функции.
- Архитектура Django без общего доступа также позволяет вам масштабироваться, перемещая код на новые серверы. Поскольку каждая часть архитектуры независима от других, ее легко масштабировать, добавляя новое оборудование на уровне сервера. В результате вы можете быстро увеличить емкость без необходимости масштабирования путем переноса кода на новый сервер. То же самое применимо, если вам нужно переместить код из одной части архитектуры в другую. Вы можете легко перемещать код, используя компонентный дизайн Django, чтобы определить, какой код следует перенести, какой оставить в покое, а какой следует использовать совместно.
- Эти шаблоны обеспечивают большую ясность и удобство сопровождения кода, требуя, чтобы весь код, используемый в данном приложении, имел одинаковое пространство имен и чтобы один и тот же код использовался для разных приложений. Кроме того, ожидается, что разработчики будут следовать стандартам или рекомендациям по кодированию Django, которые используются для выявления неэффективных методов кодирования и предотвращения будущих проблем с ремонтопригодностью. Стандарты кодирования поощряют написание кода, который легко понять, протестировать и изменить позже, если это необходимо. Это особенно важно, когда большие объемы кода пишутся и совместно используются несколькими проектами или в рамках одного проекта.
- Есть много способов запустить проект Django. Вы можете использовать один из множества готовых пакетов или создать свой собственный. Самый популярный способ — использовать один из множества готовых к использованию пакетов Django. Еще один популярный способ — создать свой собственный с нуля. Пакеты Django великолепны, но иногда они могут быть перегружены. Лучший подход — сосредоточиться на создании небольших полезных приложений с помощью Django.
Архитектура Django
Каждый веб-сайт имеет три основных раздела кода: логика ввода, бизнес-логика и логика пользовательского интерфейса.
Код должен выполнять определенные функции, входные данные — это набор данных и то, как он хранится в базе данных. Это просто вопрос доставки входных данных в базу данных в желаемом формате. Бизнес-логика — это то, что управляет выводом сервера в HTML или другом формате. HTML и CSS — это страницы, для которых он написан. В наши дни используется другой подход. Контент собирается из нескольких источников и хранится в отдельных файлах. Это известно как потоковая передача страниц, и это широко используемый подход к контенту веб-сайта. Код веб-страницы хранится в одном файле, а HTML, CSS и JS — в отдельных файлах. Контент передается с сервера и отображается в браузере. В наши дни подавляющая часть разработки программного обеспечения выполняется с использованием веб-технологий, таких как JavaScript, HTML, CSS и JAVA, которые знакомы разработчикам. Может показаться неожиданным, что большая часть разработки программного обеспечения выполняется с использованием этих технологий.
MVC имеет модель, представление и контроллер. Модель — это информация, с которой будет работать ваш сайт/приложение. Представление — это представление Модели на вашем веб-сайте/в приложении. Наконец, контроллер — это код, который соединяет представление и модель вместе. В большинстве случаев контроллер — это место, где вы будете писать свой код.
Давайте подробно рассмотрим каждый из этих компонентов, чтобы понять, как они работают вместе, чтобы сформировать структуру Django MVC.
Модель
Модель отвечает за обработку всех задач, связанных с данными. Это может быть таблица в базе данных, файл JSON или что-то еще. Модель берет данные из того места, где они хранятся, а затем обрабатывает их перед отправкой в представление. Если модель нужно изменить, это делается в одном месте. В веб-приложении модель — это место, где данные преобразуются из одного формата в другой. Например, допустим, у нас есть модель, которая получает набор данных в определенном формате, а затем преобразует его в другой формат перед отправкой в представление. В современном мире, если мы хотим создать веб-сайт любого типа, у нас должна быть какая-то база данных, потому что мы должны принимать пользовательский ввод независимо от того, создаем ли мы простой пост в блоге. Модель — это компонент архитектуры Django, содержащий бизнес-логику. xПоток информации выглядит следующим образом: когда вы регистрируетесь на любом веб-сайте, вы нажимаете кнопку регистрации. При нажатии на кнопку регистрации на контроллер отправляется запрос. Затем контроллер вызывает модель и просит ее применить логику к форме, полученной в качестве параметра. Затем модель применяет свою логику и дает ответ контроллеру. Затем контроллер передает ответ вам, который является клиентом.
View
Компонент View в архитектуре Django используется для отображения данных из компонента Model. Его также можно использовать для сбора данных от пользователя и отправки их в модель в качестве ввода формы. Таким образом, компонент View содержит логику пользовательского интерфейса. Примеры логики пользовательского интерфейса можно найти в коде JavaScript для анимации, визуализации и других интерактивных элементов. Например, если вы нажмете на продукт, а затем перейдете на страницу сведений о продукте, новая созданная веб-страница будет представлением сведений о продукте. Точно так же, если вы нажмете на категорию, а затем перейдете к представлению категории, новая сгенерированная веб-страница будет представлением категории. Вы можете воспроизвести такое же поведение на своем собственном веб-сайте, используя представления.
Контроллер
Поскольку контроллер решает, какое представление отображать, он может управлять моделью представления. Таким образом, он может применять любую логику и правила к модели представления. Контроллер также определяет, как отображать представление и как реагировать на пользовательский ввод. Для этой цели он также может манипулировать моделью представления. Поскольку модель представления является абстракцией модели данных, контроллер может манипулировать моделью представления любым способом. Он также может не манипулировать моделью, а отображать данные как есть. Это полезно в тех случаях, когда данные модели являются конфиденциальными и должны отображаться точно такими, какие они есть. Можно сказать, что именно контроллер решает, когда и что нужно отображать. Контроллеры очень помогают сохранить наш код СУХИМ, поддерживаемым и масштабируемым. Мы также можем иметь более одного контроллера в одном приложении. Например, у нас есть контроллер входа в систему, который отвечает за процесс входа в систему, а другой — за данные профиля.
Шаблон Django MTV
Веб-браузер запрашивает страницу. Когда страница получена, данные отображаются в заполнителях на странице. Затем ответ отправляется обратно клиенту, завершая сеанс и блокируя дальнейшие запросы на несколько секунд. В следующий раз, когда клиент перейдет по тому же URL-адресу, приложение будет готово, и начнется новый сеанс. Так работают традиционные веб-приложения. Традиционные веб-приложения трудно изменить. Если бизнес-требования меняются, приложение обычно слишком велико, чтобы его можно было изменить. Если маркетинговые требования меняются, приложение обычно слишком велико, чтобы его можно было изменить.
Для обработки каждого из этих шагов в веб-приложении Django используются отдельные файлы.
URL-адреса: Функции просмотра можно использовать для более эффективной обработки HTTP-запросов за счет индивидуальной обработки каждого ресурса. URL-адреса, с другой стороны, могут обрабатываться вместе с помощью одной функции. Функции представления могут обрабатывать каждый ресурс отдельно, обрабатывая URL-адреса по отдельности. Функции просмотра также могут получать данные от преобразователя URL-адресов, который сопоставляет определенные литеральные строки или символы в URL-адресе и передает их в качестве данных.
Представление: Представление может быть основано на базе данных, приложении или любом другом источнике информации, и обычно оно отделено от кода, который получает HTTP-запросы и отвечает на них. Когда вы отправляете HTTP-запрос приложению, код, обрабатывающий этот запрос, может находиться на том же физическом компьютере, что и код приложения. Это может быть не так для большого количества запросов. Например, веб-приложение, работающее в облачной инфраструктуре, может иметь один виртуальный хост, работающий на одном физическом компьютере. В этом случае код, обрабатывающий запросы, может находиться не на том же физическом компьютере, что и код, получающий запросы.
Модели: Структура данных и методологии приложений базы данных определяются моделью.
Шаблоны: Текстовый файл HTML-шаблона определяет структуру или макет файла (например, HTML-страницы) с текстом-заполнителем, представляющим фактическое содержимое. Модель можно использовать для динамического заполнения HTML-страницы данными из представления, создавая представление. Шаблон можно использовать для определения структуры файла любого типа, а не только HTML.
Особенности Джанго
Вот некоторые особенности, которые делают Django идеальной платформой для разработки веб-приложений:
- Супер быстро: Разработка Django происходит очень быстро. Наши идеи могут очень быстро принять форму продукта.
- Полная загрузка: В Django есть десятки проектов, которые можно интегрировать для выполнения общих задач, таких как аутентификация пользователей, авторизация и администрирование контента.
- Универсальность: Django можно использовать практически для любого проекта, от CMS до приложений электронной коммерции и платформ доставки по запросу.
- Безопасность: Django также имеет поддержку для предотвращения распространенных проблем безопасности, включая подделку межсайтовых запросов, межсайтовый скриптинг, внедрение SQL и кликджекинг.
- Масштабируемость: Веб-сайты Django могут быстро масштабироваться для удовлетворения высоких требований к трафику.
Преимущества архитектуры Django
Платформа Django использует эту архитектуру и не требует сложного кода для взаимодействия между всеми тремя компонентами. Вот почему Django становится популярным.
Ниже перечислены некоторые преимущества использования этой архитектуры в Django:
- Быстрая разработка: Также одним из преимуществ Django является то, что несколько разработчиков могут одновременно работать над разными аспектами одного и того же приложения. На самом деле, архитектура Django, которая разделяет компоненты, позволяет нескольким разработчикам одновременно работать над разными аспектами одного и того же приложения.
- Слабосвязанный: Каждая часть архитектуры Django должна присутствовать, чтобы поддерживать высокий уровень безопасности веб-сайта. Потому что файл модели теперь будет храниться только на нашем сервере, а не на веб-странице.
- Простота модификации: Значение этого элемента архитектуры Django заключается в том, что нам не нужно изменять другие компоненты, если есть изменения в других компонентах. Преимущество использования Django заключается в том, что он дает нам гораздо больше гибкости при разработке нашего веб-сайта, чем другие фреймворки.
Заключение
Django — это популярная система управления контентом (CMS) и веб-фреймворк, использующая Python для создания веб-приложений. Django предоставляет гибкую, масштабируемую архитектуру, упрощающую создание удобных в сопровождении и безопасных приложений. В этом руководстве мы изучили основы архитектуры Django и узнали, как она строится на основе моделей и представлений по умолчанию. Мы также рассмотрели, как добавлять настраиваемые поля в ваши модели и представления, а также как настраивать язык шаблонов. Следуя этому руководству, вы должны хорошо понимать основные концепции архитектуры Django.
Дополнительные ресурсы
- Django Queption Questions
- Django Projects
- Django Books
- Node.js против Django
- Flask Vs Django
Mastering Django: Structure -Mastering Django
4
Mastering Django: Structure -Mastering Django
4
.
Самые частые жалобы новичков в Django: «Это слишком сложно для понимания» или «Это слишком сложно». Возможно, вы даже сами сейчас об этом думаете.
На базовом уровне Django не сложен. Да, у него есть свои особенности, и да, большие проекты Django могут быть очень сложными зверями, но суть в том, что Django — это логически структурированный фреймворк, построенный на самом простом для изучения доступном языке программирования (Python).
Будучи преподавателем, я провел бессчетное количество часов, пытаясь понять, почему люди находят Django сложным и трудным для изучения. Размышление об этом привело меня к ереси №1: это не твоя вина, мы просто неправильно этому учили.
Помните все книги и руководства, которые начинаются со слов «Django — это фреймворк Model-View-Controller (MVC)…»? (Это вырезка и вставка из одной из моих книг, так что я виновен в этом так же, как и все остальные).
Заявление о том, что Django является платформой MVC, получает один из двух ответов:
- Новички говорят: «Что, черт возьми, такое MVC? * стон *. Думаю, это еще одна чертова вещь, которую мне нужно выучить!
- Более опытные программисты говорят: «Ага! Это как Framework X».
В обоих случаях они почти полностью неверны.
Django — слабосвязанный фреймворк
Если вы позволите мне минутку и очистите свой мозг от ваших любимых трехбуквенных акронимов (TLA), есть более простой способ понять это.
Первый шаг — понять, что Django — это не результат академических упражнений и не идея какого-то гуру о крутости — создатели Django разработали Django для решения определенного набора проблем в загруженной и сложной новостной организации. В центре этого набора проблем находились три совершенно разные потребности:
- Специалистам по работе с данными (и девушкам) нужен был общий интерфейс для работы с разрозненными источниками данных, форматами и базами данных.
- Командам дизайнеров нужно было управлять взаимодействием с пользователем с помощью уже имеющихся инструментов (HTML, CSS, JavaScript и т. д.).
- Заядлым программистам требовалась структура, которая позволяла бы им быстро внедрять системные изменения и делать всех счастливыми.
Решающее значение для того, чтобы все это заработало, было обеспечение того, чтобы каждым из этих основных компонентов — данными, дизайном и бизнес-логикой — можно было управлять независимо или, если использовать правильный компьютерный язык, — инфраструктура должна была использовать свободная муфта .
Теперь важно понять, что я не пытаюсь сказать, что Django делает здесь что-то волшебное или новое, и проблемы, с которыми столкнулись создатели Django, не были уникальными. Создатели Django — блестящие ребята, и они, безусловно, знали, что MVC — это хорошо зарекомендовавший себя шаблон проектирования, который поможет решить их проблемы.
Я считаю, что вряд ли кто-либо из них когда-либо говорил: «Подождите, мальчики, нам нужно изменить этот код, потому что Википедия говорит, что контроллер должен…».
Вам не нужно зацикливаться на семантике — вы можете спокойно забыть о запутанных TLA и о том, похож ли Django на Framework X, и сосредоточиться на том, что такое Django.
Архитектура Django состоит из трех основных частей:
- Часть 1 — это набор инструментов, которые значительно упрощают работу с данными и базами данных.
- Часть 2 — это система текстовых шаблонов, подходящая для непрограммистов; и
- , часть 3 — это инфраструктура, которая обеспечивает связь между пользователем и базой данных и автоматизирует многие болезненные части управления сложным веб-сайтом.
Части 1 и 2 легко соотносятся друг с другом (см. рис. 3.1):
- Модели Django — это инструменты, которые мы используем для работы с данными и базами данных; и
- Шаблоны Django предоставляют удобную для дизайнеров систему текстовых шаблонов.
А как насчет части 3? Я слышал, вы спрашиваете, это контроллер или представление Django?
Нет. Что приводит меня к ереси № 2:
Представление Django не является контроллером
Посмотрите на рисунок 3. 1, он выглядит знакомым?
Рисунок 3.1: Несколько вводящая в заблуждение диаграмма Django MTV.
Это одна из моих диаграмм, но есть много похожих версий. Обычный способ объяснить архитектуру Django с точки зрения MVC — описать ее как модель-шаблон-представление (MTV) или модель-представление-шаблон (MVT). Между MTV и MVT нет никакой разницы — это два разных способа описать одно и то же, что только усугубляет путаницу.
Вводящая в заблуждение часть этой диаграммы — вид. Представление в Django чаще всего описывается как эквивалент контроллера в MVC, но это не так — это все еще представление.
Рисунок 3.2 — это вариант рисунка 3.1, иллюстрирующий мою точку зрения.
Рисунок 3.2: Немного другой вид «стека» MTV Джанго.
Обратите внимание, как я провел линию между клиентской и серверной частями. Как и все клиент-серверные архитектуры, Django использует объекты запроса и ответа для связи между клиентом и сервером. Поскольку Django — это веб-фреймворк, мы говорим об объектах запросов и ответов HTTP
.
Итак, в этом упрощенном процессе представление извлекает данные из базы данных через модель, форматирует их, упаковывает в объект ответа HTTP и отправляет клиенту (браузеру).
Другими словами, представление представляет модель клиенту в виде HTTP-ответа. Это также точное определение представления в MVC, или, если процитировать Википедию (не самый точный источник, я знаю, но достаточно близко):
«Вид означает представление модели в определенном формате»
Попытка изменить определение представления Django, чтобы оно соответствовало конкретной точке зрения, неизбежно приводит к одному из двух:
- Запутавшийся программист помещает все в модуль представлений; или
- Сбитый с толку программист говорит: «Django — это слишком сложно!» и вместо этого смотрит телевизор
Итак, отбросив наши М, Т, В и С, на рис. 3. 3 представлен более целостный взгляд на архитектуру Django.
Рисунок 3.3: Более целостный взгляд на архитектуру Django.
Первая путаница, которую мы можем прояснить, заключается в том, куда поместить конкретную функцию или класс:
Возвращает ли функция/класс ответ?
- ДА 901:00 — это вид. Поместите его в модуль представлений (
views.py
). - НЕТ — это не представление, это логика приложения. Поместите его в другое место (
где-то_else.py
).
Мы обсудим часть «где-то еще» в следующем разделе этой главы.
Следующее, что следует отметить, это то, что инфраструктура Django инкапсулирует модель, логику представления и бизнес-логику. В некоторых руководствах говорится, что инфраструктура Django является контроллером, но это тоже неправда — инфраструктура Django может делать гораздо больше, чем просто реагировать на пользовательский ввод и взаимодействовать с данными.
Прекрасным примером этой дополнительной мощности является промежуточное ПО Django, которое находится между представлением и клиентской стороной. Промежуточное ПО Django выполняет важные проверки безопасности и аутентификации перед отправкой ответа в браузер.
Итак, возвращаясь к двум запутанным ответам в начале главы:
- Новичкам — нет, вам не нужно изучать MVC, потому что это, скорее всего, запутает вас и вызовет больше вопросов, чем ответы
- Программисты — нет, Django не похож на Framework X, и попытка думать, что это так, скорее всего, запутает вас и вызовет больше вопросов, чем ответов посмотрите на структуру проекта Django.
Структура проекта Django
Django не требует от вас создания веб-приложений каким-либо особым образом. На самом деле, миллиарды электронов были принесены в жертву обсуждению «Единственного лучшего способа структурировать проект Django». Мы здесь все прагматичные программисты, поэтому не будем играть в эту игру.
Однако у Django есть способ делать вещи по умолчанию, и в нем есть определенная логика, которую вам необходимо понять, чтобы стать профессиональным программистом Django.
Основной единицей веб-приложения Django является проект Django. Проект Django состоит из одного или нескольких приложений Django (рис. 3.4)
Рис. 3.4. Структура проекта Django.
Приложение Django — это автономный пакет, который должен делать только одну вещь. Например, блог, приложение для участников или календарь событий. Обратите внимание, что в нижней части рисунка 3.4 есть дополнительный пакет под названием Django Apps.
Это еще один случай, когда логика Django проходит через инфраструктуру — сам Django представляет собой набор приложений, каждое из которых предназначено для одной задачи. Все встроенные приложения Django призваны облегчить вашу жизнь, и это хорошо.
Хотя встроенные приложения невидимы в дереве проекта, вы можете увидеть их в файле
settings. py
:# ...\myclub_project\myclub_site\myclub_site\settings.py # частичный список УСТАНОВЛЕННЫЕ_ПРИЛОЖЕНИЯ = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Вы видите, что Django автоматически добавил несколько приложений в ваш проект. Есть также много других встроенных приложений Django, которые вы можете добавить в список
INSTALLED_APPS
. Когда вы добавляете свои приложения в проект Django, вы также добавляете ссылку на класс конфигурации приложения в этот список.Вы можете увидеть эту логику в том, что Django уже создал для вас. Откройте папку
\myclub_project
. Структура папок должна выглядеть примерно так:# ...\my_clubproject \env_myclub \myclub_site <= Это ваш проект Django \myclub_site <= Это приложение Django db.sqlite3 <= Ваша база данных проекта manage. py <= Утилита управления проектами Django
Давайте рассмотрим эти файлы и папки более подробно:
- В папке
env_myclub
Django хранит файлы вашей виртуальной среды. Как правило, вы должны оставить все внутри этой папки в покое. - Внешняя папка
myclub_site
— это ваш проект Django. Джанго создал эту папку и ее содержимое, когда вы выполнили командуstartproject
в предыдущей главе. Django не заботится об имени папки, поэтому вы можете переименовать его во что-то значимое для вас. - Во внешней папке
myclub_site
находятся два файла:-
db.sqlite3
. База данных, созданная при выполнении командыmigrate
; и -
manage.py
. Утилита командной строки для выполнения команд Django из вашего проекта.
-
- Внутренняя папка
myclub_site
— это ваше веб-приложение Django. Это единственное приложение, которое Django создает для вас автоматически. Поскольку Django — это веб-фреймворк, предполагается, что вам нужно веб-приложение.
Теперь это должно стать более понятным, но могу поспорить, что есть одна вещь, которая все еще немного сбивает с толку — две папки
myclub_site
.Программисты, плохо знакомые с Django, очень часто жалуются на то, как сложно понять, в какой папке они должны работать, когда есть две папки с одинаковыми именами. Django не одинок в этом соглашении — интегрированные среды разработки (IDE), такие как Visual Studio, создают папку проекта и папку приложения с одинаковыми именами. Но то, что это распространено, не означает, что это не сбивает с толку.
Как я уже говорил, Django не волнует, как вы назовете эту папку, поэтому давайте совершим ересь № 3, нарушив тринадцать лет соглашения об обучении Django, пока мы это делаем, и переименуем папку!
Здесь мы переименовываем его в «myclub_root».
После внесения изменений структура папок должна измениться на следующую:
\myclub_project \myclub_site \myclub_site
К этому:
\myclub_project \myclub_root \myclub_site
Теперь, когда мы позаботились об этом источнике путаницы, давайте заглянем внутрь веб-сайта
myclub_site
, созданного для нас Django:# \myclub_project\myclub_root\ \myclub_site __init__.py asgi.py # Только Django 3 settings.py urls.py wsgi.py
Присмотритесь к этим файлам:
- Файл
__init__.py
сообщает Python, что эта папка (ваше приложение Django) является пакетом Python. -
asgi.py
позволяет веб-серверам, совместимым с ASGI, обслуживать ваш проект. -
settings.py
содержит настройки вашего проекта Django. Каждый проект Django должен иметь файл настроек. По соглашению Django помещает его в приложение вашего веб-сайта, но он не обязан там жить. Как я упоминал ранее, есть сторонники других структур, но здесь мы используем значение по умолчанию. -
urls.py
содержит конфигурации URL-адресов на уровне проекта. По умолчанию он содержит один шаблон URL для администратора. Подробнее об URL-адресах мы поговорим позже в этой главе, а более подробно — в главе 5. -
wsgi.py
позволяет веб-серверам, совместимым с WSGI, обслуживать ваш проект.
Теперь, когда мы хорошо рассмотрели базовую структуру проекта Django, пришло время сделать следующий шаг и добавить собственное приложение Django.
Создание собственных приложений Django
Возможно, вы заметили, что в вашем проекте пока нет настоящего программного кода. Существует файл настроек с информацией о конфигурации, почти пустой файл URL-адресов и утилита командной строки, которая запускает веб-сайт, который мало что делает.
Это связано с тем, что для создания функционирующего веб-сайта Django необходимо создать приложения Django . Приложение Django (или приложение для краткости) — это место, где выполняется работа. Приложения — одна из главных фишек Django. Они не только позволяют вам добавлять функциональные возможности в проект Django, не мешая другим частям проекта, но и предназначены для переносимости приложений, поэтому вы можете использовать одно приложение в нескольких проектах.
Итак, давайте создадим наше первое пользовательское приложение Django. Наш сайт социального клуба нуждается в календаре событий, чтобы показать предстоящие события для клуба, поэтому мы создаем приложение Django под названием
событий
.Запустите виртуальную среду Python, перейдите в папку
\myclub_root
и выполните команду:python manage.py startapp events
Вот как должен выглядеть вывод вашей командной оболочки:
(env_myclub) .. .> cd myclub_root (env_myclub) ...\myclub_root> события запуска python manage.py (env_myclub) ...\myclub_root>
После того, как вы создали свое приложение, вы должны указать Django установить его в свой проект. Это легко сделать — внутри вашего
файл settings.py
представляет собой список с именемINSTALLED_APPS
. Этот список содержит все приложения, установленные в вашем проекте Django. Django поставляется с несколькими предустановленными приложениями, нам просто нужно добавить ваше новое приложениеevents
в список (выделено жирным шрифтом):1 INSTALLED_APPS = [ 2 'events.apps.EventsConfig', 3 'django.contrib.admin', 4 # больше приложений 5 ]
Внутри каждого приложения Django создает файл
apps.py
, содержащий класс конфигурации, названный в честь вашего приложения. Здесь класс называетсяEventsConfig
. Чтобы зарегистрировать наше приложение в Django, нам нужно указать классEventsConfig
— это то, что мы делаем в строке 2 нашего измененного спискаINSTALLED_APPS
.Если вам интересно,
EventsConfig
по умолчанию содержит два параметра конфигурации: имя приложения («события») и тип данных автополя по умолчанию.Нумерация строк в примерах кода
На протяжении всей книги я использую нумерацию строк, чтобы вам было легче следить за объяснениями.
Поскольку я часто использую фрагменты кода из файлов вашего приложения, нумерация строк в примере не совпадает с нумерацией строк в фактическом файле исходного кода.
Теперь давайте заглянем в папку
\myclub_root
, чтобы увидеть, что Django создал для нас:\events \миграции __init__.py admin.py приложения.py модели.py тесты.py views.py
- В папке
миграции
Django хранит миграции или изменения в вашей базе данных. Здесь нет ничего, о чем вам нужно беспокоиться прямо сейчас. -
__init__.py
сообщает Python, что ваше приложениеevents
является пакетом. -
admin.py
— это место, где вы регистрируете модели своего приложения в приложении администрирования Django. -
apps.py
— это файл конфигурации, общий для всех приложений Django. -
models.py
— это модуль, содержащий модели для вашего приложения. -
test.py
содержит тестовые процедуры, которые выполняются при тестировании вашего приложения. -
views.py
— это модуль, содержащий представления для вашего приложения.
Теперь, когда у нас есть полное представление о проекте Django, мы также можем ответить на вопрос, поставленный ранее в этой главе: «ну, а если это не представление, то куда оно идет?»
Когда у вас есть код, который не является представлением, вы создаете новый модуль Python (файл
.py
) внутри своего приложения и помещаете связанных функций и классов в файл. Обратите внимание на родственные. Если у вас есть куча функций, которые предоставляют, например, утилиты управления базой данных, поместите их все в один файл. Функции и классы, не связанные с управлением базой данных, должны находиться в другом файле. Вы также должны стараться быть описательными в именах модулей — в конце концов, более разумно поместить функции вашей базы данных в файл с именем 9.0277 db_utils.py , чем файл с именемmonkeys.py
…При создании новых модулей для вашего проекта Django вы также должны учитывать объем. Хотя добавление пользовательских модулей в приложения гораздо более распространено (и более портативно), у вас могут быть модули уровня проекта (например,
manage.py
Django) и модули уровня сайта. В последнем случае ваши пользовательские модули должны находиться в той же папке, что и файлsettings.py
.Последние два пункта могут показаться очевидными, но важно понимать, что, хотя Django имеет логику по умолчанию в своей структуре, ничего не высечено из камня. Django является гибким и позволяет вам расширять и изменять структуру вашего проекта в соответствии с логикой вашего веб-приложения.
Теперь, когда мы хорошо понимаем структуру проектов и приложений Django, следующий очевидный вопрос, учитывая, что мы создаем веб-приложения, — «Как нам перемещаться по проекту Django?»
Чтобы ответить на этот вопрос, нам нужно проверить последнюю часть общей головоломки Django — конфигурации URL.
Нравится контент? Возьмите книгу всего за 14 долларов!
Помимо предоставления вам удобного ресурса, который вы можете распечатать или загрузить на свое устройство, покупка книги также помогает поддерживать этот сайт.
Комплект электронных книг включает PDF, ePub и исходный код, и вы платите только за то, что можете себе позволить.
Получите комплект электронных книг здесь.
Вы можете получить книгу в мягкой обложке на Amazon.
URLconfs — Django’s Navigator
Осталась последняя часть пазла фреймворка Django — критически важный путь связи, который сопоставляет запрос на стороне клиента с ресурсом проекта (стрелки между представлением и шаблоном на рис. 3.3). Как и все веб-приложения, Django использует унифицированные указатели ресурсов (URL) для сопоставления содержимого с запросом.
Пакет Django
urls
предоставляет десятки функций и классов для работы с различными форматами URL, разрешения имен, обработки исключений и других навигационных утилит. Однако, по сути, он позволяет вам сопоставить URL-адрес с функцией или классом в вашем проекте Django.Конфигурация URL-адреса Django (или сокращенно URLconf) сопоставляет уникальный URL-адрес с ресурсом проекта. Вы можете думать об этом как о сопоставлении имени человека с его адресом. За исключением Django, мы не сопоставляем почтовый адрес — мы сопоставляем путь Python, используя Python 9.0194 точечная запись .
Если вы не знакомы с точечной нотацией, это распространенная идиома в объектно-ориентированном программировании. Мне нравится думать о точке как о точке, потому что точка указывает на что-то. В Python оператор точки указывает на следующий объект в цепочке объектов.
В классах Django цепочка объектов выглядит следующим образом:
package.module.class.method
Или с функциями:
package.module.function.attribute
Некоторые примеры из жизни:
-
формы. Форма
указывает на классформы
в пакете форм -
events.apps.EventsConfig
указывает на классEventsConfig
в подпакетеapps
пакета событий (т. е. файлapps.py
в приложенииevents
). -
django.conf.urls
указывает на пакетurls
внутри пакетаconf
внутри Django, который также является пакетом Python!
Иногда это может немного сбивать с толку, но если вы не забудете соединить точки (извините, это плохой каламбур), вы обычно сможете узнать, на что ссылается оператор точки.
При использовании URLconf путь указывает на функцию или класс внутри модуля (файл
. py
). Давайте еще раз посмотрим на диаграмму нашего проекта Django (рис. 3.5).Рисунок 3.5: Поиск функций и классов с помощью Django URLconfs.
Чтобы создать URLconf, мы используем
path()
функция. Первая часть функции — это URL-адрес, поэтому на рис. 3.5 URL-адрес —app1/
. Затем функцияpath()
сопоставляет этот URL-адрес сapp1.views.some_view()
.Предполагая, что адрес вашего сайта
http://www.mycoolsite.com
, простым английским языком мы говорим:«Когда кто-то переходит на
http://www.mycoolsite.com/app1/
, запустите функцияsome_view()
внутриapp1
файлаviews.py
».Обратите внимание, что URL-адрес не обязательно должен сопоставляться с представлением — он может сопоставляться с любым модулем в вашем приложении Django. Например, у вас может быть набор беспроводных датчиков окружающей среды, которые отправляют данные обратно на сервер. У вас может быть пользовательский модуль с именем
sensor.py
, в котором есть функция или класс для записи данных датчика в вашу базу данных, и все это без какого-либо касания представления.Вот и все. Конечно, URLconfs может сделать гораздо больше, чем сопоставить статический URL-адрес с функцией или классом, но если вы понимаете основы — невероятно быстрая и мощная система навигации Django основана на простой концепции сопоставления URL-адреса с ресурсом — тогда у вас есть все, что вам нужно, чтобы связать все ваши приложения Django вместе в навигационный веб-проект.
Заключительное замечание по написанию приложений Django
Распространенный и неизбежный вопрос возникает, когда вы разбираетесь в базовой структуре Django:
«С чего начать? Должен ли я начать с написания своих моделей, конфигураций URL, своих представлений? Или что?"
Ну вот вам и последняя ересь за главу: не важно .
Некоторым людям нравится начинать с построения всех моделей, чтобы увидеть, как выглядит структура данных; другие предпочитают сначала создавать визуальный макет, поэтому они начинают с шаблонов.
- В папке