Django Book: описание Python-моделей

Автор: | 25/02/2015
 

django_logo_2Предыдущая часть.

Как мы уже обсуждали ранее в этой главе, “M” в MVT означает “Model“. Модель в Django – это описание данных в вашей базе данных, представленная в виде кода на Python. Это ваш уровень данных – эквивалент SQL запроса CREATE TABLE, но записанный в Python вместо SQL и включает в себя больше, чем просто описание колонок таблицы. Django использует модели для выполнения SQL запросов на фоне работы приложения, и возвращает данные, представляющие таблицы вашей базы данных, но в виде, который может быть обработан Python.

Если вы знакомы с базами данных, вы можете подумать что-то вроде – “Не будет ли это излишней работой – описывать модели данных в Python вместо обычного SQL“? В Django это реализовано именно таким образом по нескольким причинам:

  • Проверка данных требует дополнительных расходов ресурсов и не может быть совершенной. Для того, что бы предоставить удобный API для доступа к базам данных – Django требуется как-то выяснить её формат, и что бы сделать это – естьдва способа. Первый – описать данные непосредственно в Python, а второй – выполнять такую проверку во время работы приложения

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

  • Писать на Python – прикольно, и если вы держите всё, с чем работаете, в Python – это избавит ваш мозг от лишних “переключений контекста”. Такой подход помогает достичь более выскоой продуктивности – держать всё в одном стиле программирования. Необходимость писать SQL, потом Python, а затем опять SQL – разрушительна для вашего процесса разработки.

  • Хранение моделей данных в коде вместо базы данных делает более простым реализацию контроля версий. Вы можете легче отслеживать измненения в моделях данных.

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

  • SQL зачастую несовместим на различных платформах. Если вы распространяете веб-приложение, то намного удобнее предоставлять модуль на Python, который бы описывал модель данных, чем отдельные наборы запросов типа CREATE TABLE для  MySQL, PostgreSQL и SQLite.

Недостаток такого подхода – это верятность “рассинхронизации” кода на Python с реальной схемой базы данных. Если вы делаете изменения в модели Django – вам потребуется так же вносить изменения в саму базу данных, что бы она соответствовала модели. Мы рассмотрим некоторые возможности для решения таких задач далее в этой главе.

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

Продолжение – Django book: ваша первая модель.