0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Краткая характеристика</a></li>
1
<ul><li><a>Краткая характеристика</a></li>
2
<li><a>Принцип работы</a></li>
2
<li><a>Принцип работы</a></li>
3
<li><a>Преимущества и недостатки</a></li>
3
<li><a>Преимущества и недостатки</a></li>
4
<li><a>Когда лучше применять фреймворк</a></li>
4
<li><a>Когда лучше применять фреймворк</a></li>
5
<li><a>Как установить</a><ul><li><a>Предварительная подготовка</a></li>
5
<li><a>Как установить</a><ul><li><a>Предварительная подготовка</a></li>
6
<li><a>Инициализация виртуальной среды</a></li>
6
<li><a>Инициализация виртуальной среды</a></li>
7
<li><a>Установка фреймворка</a></li>
7
<li><a>Установка фреймворка</a></li>
8
</ul></li>
8
</ul></li>
9
<li><a>Настройка первого проекта</a><ul><li><a>Состав стандартного проекта</a></li>
9
<li><a>Настройка первого проекта</a><ul><li><a>Состав стандартного проекта</a></li>
10
</ul></li>
10
</ul></li>
11
<li><a>Запросы</a><ul><li><a>Создание объектов</a></li>
11
<li><a>Запросы</a><ul><li><a>Создание объектов</a></li>
12
<li><a>Сохранение изменений</a></li>
12
<li><a>Сохранение изменений</a></li>
13
<li><a>Извлечение</a></li>
13
<li><a>Извлечение</a></li>
14
<li><a>Получение всех объектов</a></li>
14
<li><a>Получение всех объектов</a></li>
15
</ul></li>
15
</ul></li>
16
<li><a>Работа с фильтрами</a><ul><li><a>Объединение</a></li>
16
<li><a>Работа с фильтрами</a><ul><li><a>Объединение</a></li>
17
<li><a>Уникальность</a></li>
17
<li><a>Уникальность</a></li>
18
</ul></li>
18
</ul></li>
19
<li><a>Прочие методы</a><ul><li><ul><li><a>Ограничения</a></li>
19
<li><a>Прочие методы</a><ul><li><ul><li><a>Ограничения</a></li>
20
<li><a>Поиск полей</a></li>
20
<li><a>Поиск полей</a></li>
21
<li><a>Точные совпадения</a></li>
21
<li><a>Точные совпадения</a></li>
22
<li><a>Без учета регистра</a></li>
22
<li><a>Без учета регистра</a></li>
23
<li><a>С учетом регистра</a></li>
23
<li><a>С учетом регистра</a></li>
24
</ul></li>
24
</ul></li>
25
</ul></li>
25
</ul></li>
26
<li><a>Кэширование и QuerySets</a><ul><li><ul><li><a>Когда кэширование отсутствует</a></li>
26
<li><a>Кэширование и QuerySets</a><ul><li><ul><li><a>Когда кэширование отсутствует</a></li>
27
</ul></li>
27
</ul></li>
28
<li><a>None - принцип работы</a></li>
28
<li><a>None - принцип работы</a></li>
29
</ul></li>
29
</ul></li>
30
<li><a>Сравнение объектов</a></li>
30
<li><a>Сравнение объектов</a></li>
31
<li><a>Копирование экземпляров</a></li>
31
<li><a>Копирование экземпляров</a></li>
32
<li><a>Как лучше изучить Джанго</a></li>
32
<li><a>Как лучше изучить Джанго</a></li>
33
</ul><p>Django - Python-фреймворк, который применяется для разработки веб-приложений. Данное программное обеспечение использует шаблон проектирования типа MVC. Это высокоуровневый инструмент. С его помощью разработчики смогут создавать веб и обеспечивать его поддержку. </p>
33
</ul><p>Django - Python-фреймворк, который применяется для разработки веб-приложений. Данное программное обеспечение использует шаблон проектирования типа MVC. Это высокоуровневый инструмент. С его помощью разработчики смогут создавать веб и обеспечивать его поддержку. </p>
34
<p>Далее упомянутый фреймворк будет изучен более подробно. Предложенная информация ориентирована на широкую публику. Она одинаково хорошо подойдет как тем, кто только начинает погружаться в the Python, так и уже более опытным специалистам.</p>
34
<p>Далее упомянутый фреймворк будет изучен более подробно. Предложенная информация ориентирована на широкую публику. Она одинаково хорошо подойдет как тем, кто только начинает погружаться в the Python, так и уже более опытным специалистам.</p>
35
<h2>Краткая характеристика</h2>
35
<h2>Краткая характеристика</h2>
36
<p>Перед тем как работать с the objects в Django, сначала необходимо понять, с чем программисту вообще предстоит иметь дело. Упомянутый фреймворк - веб-инструмент для разработки. С его помощью в Сети формируются полностью безопасные поддерживаемые страницы и сайты. У Джанго открытый исходный код, благодаря чему он с легкостью модифицируется и совершенствуется.</p>
36
<p>Перед тем как работать с the objects в Django, сначала необходимо понять, с чем программисту вообще предстоит иметь дело. Упомянутый фреймворк - веб-инструмент для разработки. С его помощью в Сети формируются полностью безопасные поддерживаемые страницы и сайты. У Джанго открытый исходный код, благодаря чему он с легкостью модифицируется и совершенствуется.</p>
37
<p>Соответствующий фреймворк распространяется совершенно бесплатно. Для опытных разработчиков, которым мало стандартных возможностей инструмента, система поддерживает коммерческую расширенную адаптацию.</p>
37
<p>Соответствующий фреймворк распространяется совершенно бесплатно. Для опытных разработчиков, которым мало стандартных возможностей инструмента, система поддерживает коммерческую расширенную адаптацию.</p>
38
<p>The Django был создан в 2003-2005 годах. Его разработчиками выступили программисты Адриан Головати и Саймон Уиллисон. Пакет инструментов для программирования был назван в честь гитариста из Франции.</p>
38
<p>The Django был создан в 2003-2005 годах. Его разработчиками выступили программисты Адриан Головати и Саймон Уиллисон. Пакет инструментов для программирования был назван в честь гитариста из Франции.</p>
39
<p>Первая версия упомянутого фреймворка появилась в 2005 году. Раз в год, начиная с самого начала релиза, инструмент обновляется. Иногда новые опции и функции внедряются дважды за 12 месяцев. С 2008 года the Django поддерживается компанией DSF.</p>
39
<p>Первая версия упомянутого фреймворка появилась в 2005 году. Раз в год, начиная с самого начала релиза, инструмент обновляется. Иногда новые опции и функции внедряются дважды за 12 месяцев. С 2008 года the Django поддерживается компанией DSF.</p>
40
<h2>Принцип работы</h2>
40
<h2>Принцип работы</h2>
41
<p>The Django является программной платформой (каркасом), на который разработчик "прикрепляет" дополнительные элементы. К ним можно отнести:</p>
41
<p>The Django является программной платформой (каркасом), на который разработчик "прикрепляет" дополнительные элементы. К ним можно отнести:</p>
42
<ul><li>пользовательские интерфейсы;</li>
42
<ul><li>пользовательские интерфейсы;</li>
43
<li>скрипты функционирования компонентов сайта/программного обеспечения;</li>
43
<li>скрипты функционирования компонентов сайта/программного обеспечения;</li>
44
<li>имеющиеся библиотеки;</li>
44
<li>имеющиеся библиотеки;</li>
45
<li>мультимедиа;</li>
45
<li>мультимедиа;</li>
46
<li>модули безопасности;</li>
46
<li>модули безопасности;</li>
47
<li>информационные базы.</li>
47
<li>информационные базы.</li>
48
</ul><p>Рассматриваемый проект отвечает за обеспечение базовых аспектов работы исходного проекта. Подключаемые (сменные) модули - за специфичные опции, которые относятся к каждому отдельно взятому программному обеспечению.</p>
48
</ul><p>Рассматриваемый проект отвечает за обеспечение базовых аспектов работы исходного проекта. Подключаемые (сменные) модули - за специфичные опции, которые относятся к каждому отдельно взятому программному обеспечению.</p>
49
<h2>Преимущества и недостатки</h2>
49
<h2>Преимущества и недостатки</h2>
50
<p>The objects в Джанго, а также запросы рассматриваемого инструмента целесообразно изучать только после того, как разработчик поймет, какие плюсы и минусы имеет соответствующий пакет инструментов.</p>
50
<p>The objects в Джанго, а также запросы рассматриваемого инструмента целесообразно изучать только после того, как разработчик поймет, какие плюсы и минусы имеет соответствующий пакет инструментов.</p>
51
<p>К сильным сторонам фреймворка разработчики относят такие моменты как:</p>
51
<p>К сильным сторонам фреймворка разработчики относят такие моменты как:</p>
52
<ol><li>Полнота. The framework спроектирован с соблюдением принципа "Все включено". Программисты смогут с его помощью создавать веб-приложения без сторонних элементов. Подобная особенность представляет ценность для новичков. Им не придется искать дополнительные objects для создания стандартной функциональности основной массы веб-программ.</li>
52
<ol><li>Полнота. The framework спроектирован с соблюдением принципа "Все включено". Программисты смогут с его помощью создавать веб-приложения без сторонних элементов. Подобная особенность представляет ценность для новичков. Им не придется искать дополнительные objects для создания стандартной функциональности основной массы веб-программ.</li>
53
<li>Универсальность. Упомянутый набор инструментов позволяет создавать самые разные objects и проекты "на выходе". Он используется для систем манипулирования контентом, новостных и информационных ресурсов, видеохостингов, социальных сетей и так далее. Позволяет работать с любыми типами документов, базами данных, клиентскими средами.</li>
53
<li>Универсальность. Упомянутый набор инструментов позволяет создавать самые разные objects и проекты "на выходе". Он используется для систем манипулирования контентом, новостных и информационных ресурсов, видеохостингов, социальных сетей и так далее. Позволяет работать с любыми типами документов, базами данных, клиентскими средами.</li>
54
<li>Высокий уровень надежности и безопасности. The DSF обеспечивает качественную защиту рассматриваемого проекта. Фреймворк регулярно обновляется, подвергается тестированию на наличие ошибок. Проекты, получаемые "на выходе" с его помощью, будут включать в себя на порядок меньше сбоев и неполадок.</li>
54
<li>Высокий уровень надежности и безопасности. The DSF обеспечивает качественную защиту рассматриваемого проекта. Фреймворк регулярно обновляется, подвергается тестированию на наличие ошибок. Проекты, получаемые "на выходе" с его помощью, будут включать в себя на порядок меньше сбоев и неполадок.</li>
55
<li>Поддержка масштабируемости. Архитектура инструмента базируется на полной независимости его составляющих objects. Любой элемент может быть изменен или модифицирован. Другие objects в исходном коде затрагиваться не будут.</li>
55
<li>Поддержка масштабируемости. Архитектура инструмента базируется на полной независимости его составляющих objects. Любой элемент может быть изменен или модифицирован. Другие objects в исходном коде затрагиваться не будут.</li>
56
<li>Сопровождаемость. Повторное использование кода, группировка связанных функций в отдельные модули и другие подобные операции прекрасно реализовываются. Данная особенность сокращает и упрощает структуру исходного проекта. При смене его разработчика новый специалист достаточно быстро разберется в архитектуре программного проекта.</li>
56
<li>Сопровождаемость. Повторное использование кода, группировка связанных функций в отдельные модули и другие подобные операции прекрасно реализовываются. Данная особенность сокращает и упрощает структуру исходного проекта. При смене его разработчика новый специалист достаточно быстро разберется в архитектуре программного проекта.</li>
57
<li>Переносимость. Программировать в the Django предстоит на Python. Соответствующий язык программирования дает возможность формирования проектов для всех распространенных платформ. Итоговые приложения будут одинаково хорошо запускаться на MacOs, Windows и Linux.</li>
57
<li>Переносимость. Программировать в the Django предстоит на Python. Соответствующий язык программирования дает возможность формирования проектов для всех распространенных платформ. Итоговые приложения будут одинаково хорошо запускаться на MacOs, Windows и Linux.</li>
58
<li>Открытость. Джанго - открытое программное обеспечение. Воспользоваться им для формирования программы или веб-страницы сможет каждый. Здесь также стоит учитывать право на применение "пакета" в коммерческих целях.</li>
58
<li>Открытость. Джанго - открытое программное обеспечение. Воспользоваться им для формирования программы или веб-страницы сможет каждый. Здесь также стоит учитывать право на применение "пакета" в коммерческих целях.</li>
59
<li>Собственная экосистема. Рассматриваемый компонент обладает различными objects и модулями, которые подключаются "извне".</li>
59
<li>Собственная экосистема. Рассматриваемый компонент обладает различными objects и модулями, которые подключаются "извне".</li>
60
<li>Гибкость. The Django - это инструмент с умеренной гибкостью. Он позволяет предоставлять несколько objects для решения одной и той же задачи. Воспользоваться соответствующими функциями удается 1-2 способами.</li>
60
<li>Гибкость. The Django - это инструмент с умеренной гибкостью. Он позволяет предоставлять несколько objects для решения одной и той же задачи. Воспользоваться соответствующими функциями удается 1-2 способами.</li>
61
</ol><p>Недостатки рассматриваемый пакет инструментов тоже имеет. К ним относят:</p>
61
</ol><p>Недостатки рассматриваемый пакет инструментов тоже имеет. К ним относят:</p>
62
<ol><li>Монолитную архитектуру. Джанго - это единый и самодостаточный комплекс инструментов программиста. Для разработки сложных проектов соответствующий момент станет плюсом. Для обновлений фреймворка - минусом.</li>
62
<ol><li>Монолитную архитектуру. Джанго - это единый и самодостаточный комплекс инструментов программиста. Для разработки сложных проектов соответствующий момент станет плюсом. Для обновлений фреймворка - минусом.</li>
63
<li>Старый ORM. Джанго имеет собственный менеджер базы данных - ORM. Этот элемент поддерживает работу с разнообразными типами БД. Несмотря на это, ORM не имеет некоторых полезных и весьма распространенных функций, которые встречаются в различных иных менеджерах. Пример - отсутствие поддержки интеграции с SQLAlchemy. Данный объект является основополагающим в Python при оперировании информационными базами.</li>
63
<li>Старый ORM. Джанго имеет собственный менеджер базы данных - ORM. Этот элемент поддерживает работу с разнообразными типами БД. Несмотря на это, ORM не имеет некоторых полезных и весьма распространенных функций, которые встречаются в различных иных менеджерах. Пример - отсутствие поддержки интеграции с SQLAlchemy. Данный объект является основополагающим в Python при оперировании информационными базами.</li>
64
<li>Отсутствие многозадачности. С несколькими процессами в упомянутом инструменте работать не получится.</li>
64
<li>Отсутствие многозадачности. С несколькими процессами в упомянутом инструменте работать не получится.</li>
65
<li>Шаблон маршрутизации URL. Он базируется на применении регулярных выражений (символов и метасимволов). Они используются для задавания правил поиска. Сам механизм исправно функционирует, но его настройка может звать некоторые затруднений у новичков.</li>
65
<li>Шаблон маршрутизации URL. Он базируется на применении регулярных выражений (символов и метасимволов). Они используются для задавания правил поиска. Сам механизм исправно функционирует, но его настройка может звать некоторые затруднений у новичков.</li>
66
</ol><p>The Django - это функциональный и достаточно мощный инструмент разработки. Его рекомендуется изучать всем, кто планирует программировать на Python веб-программы.</p>
66
</ol><p>The Django - это функциональный и достаточно мощный инструмент разработки. Его рекомендуется изучать всем, кто планирует программировать на Python веб-программы.</p>
67
<h2>Когда лучше применять фреймворк</h2>
67
<h2>Когда лучше применять фреймворк</h2>
68
<p>The Django - инструмент, который рекомендуется использовать в различных ситуациях:</p>
68
<p>The Django - инструмент, который рекомендуется использовать в различных ситуациях:</p>
69
<ul><li>у разрабатываемой программы высокие требования к стабильности и защите от хакерского посягательства;</li>
69
<ul><li>у разрабатываемой программы высокие требования к стабильности и защите от хакерского посягательства;</li>
70
<li>предполагается, что написанный ресурс будет развиваться или сокращаться;</li>
70
<li>предполагается, что написанный ресурс будет развиваться или сокращаться;</li>
71
<li>необходимость использоваться разнообразных информационных баз;</li>
71
<li>необходимость использоваться разнообразных информационных баз;</li>
72
<li>наличие ограничений по времени развертки и финансовому обеспечению;</li>
72
<li>наличие ограничений по времени развертки и финансовому обеспечению;</li>
73
<li>использование передовых технологий в процессе разработки;</li>
73
<li>использование передовых технологий в процессе разработки;</li>
74
<li>в процессе программирования заинтересованы разные специалисты;</li>
74
<li>в процессе программирования заинтересованы разные специалисты;</li>
75
<li>создание сайтов "с нуля" и веб-программ невозможно ввиду недостаточности опыта;</li>
75
<li>создание сайтов "с нуля" и веб-программ невозможно ввиду недостаточности опыта;</li>
76
<li>поддержка ORM так, чтобы не приходилось напрямую работать с запросами и the objects баз данных.</li>
76
<li>поддержка ORM так, чтобы не приходилось напрямую работать с запросами и the objects баз данных.</li>
77
</ul><p>Рассматриваемый инструмент не всегда эффективен. От него рекомендуется отказаться, если разработчик планирует составить приложение со сложной и разветвленной структурой, а также широким спектром функциональности. То же самое касается простых objects, в которых не слишком богатый функционал и отсутствуют базы данных. The Django не подойдет в процессе реализации программ, которые требуют написания "с нуля".</p>
77
</ul><p>Рассматриваемый инструмент не всегда эффективен. От него рекомендуется отказаться, если разработчик планирует составить приложение со сложной и разветвленной структурой, а также широким спектром функциональности. То же самое касается простых objects, в которых не слишком богатый функционал и отсутствуют базы данных. The Django не подойдет в процессе реализации программ, которые требуют написания "с нуля".</p>
78
<h2>Как установить</h2>
78
<h2>Как установить</h2>
79
<p>Перед тем как изучать запросы в Django, необходимо подготовиться. А именно - установить фреймворк на устройство. Процесс будет меняется в зависимости от операционной системы, инициализированной на компьютере. Далее будут предложены алгоритмы для Windows.</p>
79
<p>Перед тем как изучать запросы в Django, необходимо подготовиться. А именно - установить фреймворк на устройство. Процесс будет меняется в зависимости от операционной системы, инициализированной на компьютере. Далее будут предложены алгоритмы для Windows.</p>
80
<h3>Предварительная подготовка</h3>
80
<h3>Предварительная подготовка</h3>
81
<p>The Django написан на Python. Пользователям необходимо сначала установить его интерпретатор. Такое название получили objects, которые распознают исходные коды скриптов и переводят их в машинный вид. Именно его будет "понимать" операционная система. </p>
81
<p>The Django написан на Python. Пользователям необходимо сначала установить его интерпретатор. Такое название получили objects, которые распознают исходные коды скриптов и переводят их в машинный вид. Именно его будет "понимать" операционная система. </p>
82
<p>Интерпретатор - не единственный элемент, который необходимо инициализировать. Дополнительно разработчик должен установить pip - менеджер пакетов. Соответствующий проект обычно скачивается вместе с Python.</p>
82
<p>Интерпретатор - не единственный элемент, который необходимо инициализировать. Дополнительно разработчик должен установить pip - менеджер пакетов. Соответствующий проект обычно скачивается вместе с Python.</p>
83
<h3>Инициализация виртуальной среды</h3>
83
<h3>Инициализация виртуальной среды</h3>
84
<p>Данный этап можно пропустить. Он просто способствует упрощению работы с фреймворком. За счет виртуальной среды удается запускать сразу несколько приложений на Питоне. Они будут функционировать независимо друг от друга.</p>
84
<p>Данный этап можно пропустить. Он просто способствует упрощению работы с фреймворком. За счет виртуальной среды удается запускать сразу несколько приложений на Питоне. Они будут функционировать независимо друг от друга.</p>
85
<p>Чтобы установить виртуальную среду, потребуется:</p>
85
<p>Чтобы установить виртуальную среду, потребуется:</p>
86
<ol><li>Отыскать соответствующий objects в Сети. Желательно - на официальном сайте разработчика.</li>
86
<ol><li>Отыскать соответствующий objects в Сети. Желательно - на официальном сайте разработчика.</li>
87
<li>Скачать пакет на устройство.</li>
87
<li>Скачать пакет на устройство.</li>
88
<li>Запустить инициализатор.</li>
88
<li>Запустить инициализатор.</li>
89
</ol><p>Большинство разработчиков не пренебрегают данным необязательным этапом.</p>
89
</ol><p>Большинство разработчиков не пренебрегают данным необязательным этапом.</p>
90
<h3>Установка фреймворка</h3>
90
<h3>Установка фреймворка</h3>
91
<p>После установки и активации виртуальной среды потребуется провести инициализацию самого фреймворка. Для этого необходимо открыть консоль и ввести там: pip install Django. Система все остальные операции выполнит самостоятельно.</p>
91
<p>После установки и активации виртуальной среды потребуется провести инициализацию самого фреймворка. Для этого необходимо открыть консоль и ввести там: pip install Django. Система все остальные операции выполнит самостоятельно.</p>
92
<h2>Настройка первого проекта</h2>
92
<h2>Настройка первого проекта</h2>
93
<p>Перед изучением фильтров и запросов the Django необходимо научиться создавать проекты с его помощью. Это не слишком сложно.</p>
93
<p>Перед изучением фильтров и запросов the Django необходимо научиться создавать проекты с его помощью. Это не слишком сложно.</p>
94
<p>Для настройки проекта потребуется:</p>
94
<p>Для настройки проекта потребуется:</p>
95
<ol><li>Предварительно создать директорию на жестком диске устройства. Соответствующий компонент должен быть отведен под конкретный проект. Пример - C:\django.</li>
95
<ol><li>Предварительно создать директорию на жестком диске устройства. Соответствующий компонент должен быть отведен под конкретный проект. Пример - C:\django.</li>
96
<li>Перейти в командной строке в соответствующий каталог. Для этого потребуется воспользоваться командой cd.</li>
96
<li>Перейти в командной строке в соответствующий каталог. Для этого потребуется воспользоваться командой cd.</li>
97
<li>Пользоваться созданными скриптами. В Windows появится исполняемый файл (objects) - Django-admin.exe. В среде программирования - objects с аналогичным названием, но с расширением .py. Соответствующие элементы потребуются непосредственно для управления исходным проектом.</li>
97
<li>Пользоваться созданными скриптами. В Windows появится исполняемый файл (objects) - Django-admin.exe. В среде программирования - objects с аналогичным названием, но с расширением .py. Соответствующие элементы потребуются непосредственно для управления исходным проектом.</li>
98
</ol><p>Дальнейшая работа с будущим приложением или веб-страницей будет строиться на определенном алгоритме. Сначала происходит установка виртуальной серы. Для удобства рекомендуется присвоить этому objects имя. Через команду Django-admin startproject нужно запустить сам проект. В текущей папке возникнет его подкаталог.</p>
98
</ol><p>Дальнейшая работа с будущим приложением или веб-страницей будет строиться на определенном алгоритме. Сначала происходит установка виртуальной серы. Для удобства рекомендуется присвоить этому objects имя. Через команду Django-admin startproject нужно запустить сам проект. В текущей папке возникнет его подкаталог.</p>
99
<h3>Состав стандартного проекта</h3>
99
<h3>Состав стандартного проекта</h3>
100
<p>Каждый проект обязательно включает в себя разнообразные objects:</p>
100
<p>Каждый проект обязательно включает в себя разнообразные objects:</p>
101
<ul><li>manage.py - исполнение разнообразных команд, запуск программного обеспечения;</li>
101
<ul><li>manage.py - исполнение разнообразных команд, запуск программного обеспечения;</li>
102
<li>__init__ - стандартный для Питона документ, в котором располагаются модульные свойства;</li>
102
<li>__init__ - стандартный для Питона документ, в котором располагаются модульные свойства;</li>
103
<li>settings - настройки проекта;</li>
103
<li>settings - настройки проекта;</li>
104
<li>urls - поддержка таких objects как шаблоны URL-адресов;</li>
104
<li>urls - поддержка таких objects как шаблоны URL-адресов;</li>
105
<li>wsgi - параметры конфигурации WSGI, которые будут применяться в процессе развертки исходного кода.</li>
105
<li>wsgi - параметры конфигурации WSGI, которые будут применяться в процессе развертки исходного кода.</li>
106
</ul><p>Для запуска написанного кода требуется перейти в консоли к его папке, а затем использовать команду python manage.py runserver. После этого в командной строке появится адрес расположения проекта. Обычно - 127.0.0.1:8000. Если ввести его в поисковой браузерной строке, на дисплей будет выведено содержимое по умолчанию.</p>
106
</ul><p>Для запуска написанного кода требуется перейти в консоли к его папке, а затем использовать команду python manage.py runserver. После этого в командной строке появится адрес расположения проекта. Обычно - 127.0.0.1:8000. Если ввести его в поисковой браузерной строке, на дисплей будет выведено содержимое по умолчанию.</p>
107
<h2>Запросы</h2>
107
<h2>Запросы</h2>
108
<p>После создания моделей данных the Django автоматически предоставит API-абстракции баз данных. С их помощью можно работать с the objects:</p>
108
<p>После создания моделей данных the Django автоматически предоставит API-абстракции баз данных. С их помощью можно работать с the objects:</p>
109
<ul><li>удалять;</li>
109
<ul><li>удалять;</li>
110
<li>обновлять;</li>
110
<li>обновлять;</li>
111
<li>извлекать;</li>
111
<li>извлекать;</li>
112
<li>создавать.</li>
112
<li>создавать.</li>
113
</ul><p>Далее будут изучены наиболее распространенные операции и запросы, с которыми разработчику предстоит иметь дело.</p>
113
</ul><p>Далее будут изучены наиболее распространенные операции и запросы, с которыми разработчику предстоит иметь дело.</p>
114
<h3>Создание объектов</h3>
114
<h3>Создание объектов</h3>
115
<p>The objects в рассматриваемом фреймворке - неотъемлемая часть любого программного обеспечения. В инструменте используется интуитивно понятна система: класс модели представлен таблицей базы данных. Экземпляр соответствующего класса - конкретная запись в the database.</p>
115
<p>The objects в рассматриваемом фреймворке - неотъемлемая часть любого программного обеспечения. В инструменте используется интуитивно понятна система: класс модели представлен таблицей базы данных. Экземпляр соответствующего класса - конкретная запись в the database.</p>
116
<p>Для создания the objects потребуется сформировать его экземпляр. Для этого используются аргументы ключевого слова для класса модели. Далее требуется вызвать save. Этот метод поможет сохранить the objects в базе данных.</p>
116
<p>Для создания the objects потребуется сформировать его экземпляр. Для этого используются аргументы ключевого слова для класса модели. Далее требуется вызвать save. Этот метод поможет сохранить the objects в базе данных.</p>
117
<p>Выше - наглядный пример реализации соответствующей операции. Здесь предполагается, что модели расположены в документе mysite/blog/models.py.</p>
117
<p>Выше - наглядный пример реализации соответствующей операции. Здесь предполагается, что модели расположены в документе mysite/blog/models.py.</p>
118
<h3>Сохранение изменений</h3>
118
<h3>Сохранение изменений</h3>
119
<p>Операции с the objects поддерживают сохранение изменений. Для того, чтобы подтвердить операцию для компонентов, уже расположенных в базе данных, требуется воспользоваться save().</p>
119
<p>Операции с the objects поддерживают сохранение изменений. Для того, чтобы подтвердить операцию для компонентов, уже расположенных в базе данных, требуется воспользоваться save().</p>
120
<p>Вот - пример:</p>
120
<p>Вот - пример:</p>
121
<p>Здесь для blog экземпляра b5, который уже ранее был сохранен в БД, изменяется имя the objects. Соответствующие корректировки должны быть сохранены.</p>
121
<p>Здесь для blog экземпляра b5, который уже ранее был сохранен в БД, изменяется имя the objects. Соответствующие корректировки должны быть сохранены.</p>
122
<h3>Извлечение</h3>
122
<h3>Извлечение</h3>
123
<p>The objects могут быть извлечены. Для этого через QuerySet и Manager требуется сформировать модель класса. Первый компонент - это набор the objects которые поддерживаются в базе данных. В нем может содержаться один или несколько фильтров. Соответствующие the objects могут вовсе отсутствовать. С их помощью удается сузить результаты запроса на основе заданных параметров.</p>
123
<p>The objects могут быть извлечены. Для этого через QuerySet и Manager требуется сформировать модель класса. Первый компонент - это набор the objects которые поддерживаются в базе данных. В нем может содержаться один или несколько фильтров. Соответствующие the objects могут вовсе отсутствовать. С их помощью удается сузить результаты запроса на основе заданных параметров.</p>
124
<p>Если рассматривать соответствующую команду в SQL, она будет приравнена к SELECT. Фильтры - это LIMIT или WHERE.</p>
124
<p>Если рассматривать соответствующую команду в SQL, она будет приравнена к SELECT. Фильтры - это LIMIT или WHERE.</p>
125
<p>При помощи модели Manager удается получить QuerySet. У каждой модели поддерживается минимум один Manager. Он носит название objects по умолчанию. Доступ к нему предоставляется напрямую через класс имеющейся модели.</p>
125
<p>При помощи модели Manager удается получить QuerySet. У каждой модели поддерживается минимум один Manager. Он носит название objects по умолчанию. Доступ к нему предоставляется напрямую через класс имеющейся модели.</p>
126
<p>Managers доступны только через модели классов. Из экземпляров модели обратиться к ним не получится.</p>
126
<p>Managers доступны только через модели классов. Из экземпляров модели обратиться к ним не получится.</p>
127
<h3>Получение всех объектов</h3>
127
<h3>Получение всех объектов</h3>
128
<p>Наиболее простой вариант получения the objects из имеющейся таблицы - это запросить их все. Для данной операции на Manager используется метод all:</p>
128
<p>Наиболее простой вариант получения the objects из имеющейся таблицы - это запросить их все. Для данной операции на Manager используется метод all:</p>
129
<p>Он используется для того, чтобы вернуть в QuerySet все объекты, поддерживаемые заданной информационной базой.</p>
129
<p>Он используется для того, чтобы вернуть в QuerySet все объекты, поддерживаемые заданной информационной базой.</p>
130
<h2>Работа с фильтрами</h2>
130
<h2>Работа с фильтрами</h2>
131
<p>The Django objects filter - то, что поможет вводить различные фильтры в QuerySet. Они способствуют формированию подмножеств. В рассматриваемом инструменте существуют разнообразные фильтры. Наиболее распространенные:</p>
131
<p>The Django objects filter - то, что поможет вводить различные фильтры в QuerySet. Они способствуют формированию подмножеств. В рассматриваемом инструменте существуют разнообразные фильтры. Наиболее распространенные:</p>
132
<ol><li>Filter(**kwargs). Используется для того, чтобы возвращать новые QuerySet, включающие в свой состав the objects, которые соответствуют заданным параметрам поиска.</li>
132
<ol><li>Filter(**kwargs). Используется для того, чтобы возвращать новые QuerySet, включающие в свой состав the objects, которые соответствуют заданным параметрам поиска.</li>
133
<li>Exclude(**kwargs). Данный запрос используется для возврата новых QuerySet с объектами, которые не соответствуют установленным требованиям поиска.</li>
133
<li>Exclude(**kwargs). Данный запрос используется для возврата новых QuerySet с объектами, которые не соответствуют установленным требованиям поиска.</li>
134
</ol><p>Также необходимо запомнить, что поисковые параметры (**kwargs) должны быть указаны в особом формате. Вот - наглядный пример работы с фильтрами:</p>
134
</ol><p>Также необходимо запомнить, что поисковые параметры (**kwargs) должны быть указаны в особом формате. Вот - наглядный пример работы с фильтрами:</p>
135
<p>Здесь предстоит запросить и вывести список записей в имеющемся блоке, соответствующие 2006 году публикации. Для операции используется the Django object метод filter.</p>
135
<p>Здесь предстоит запросить и вывести список записей в имеющемся блоке, соответствующие 2006 году публикации. Для операции используется the Django object метод filter.</p>
136
<h3>Объединение</h3>
136
<h3>Объединение</h3>
137
<p>С фильтрами, как и с the objects, можно выполнять различные операции. Далее они будут изучены более подробно, ведь рассматриваемый инструмент требует определенных навыков в области разработки программного обеспечения.</p>
137
<p>С фильтрами, как и с the objects, можно выполнять различные операции. Далее они будут изучены более подробно, ведь рассматриваемый инструмент требует определенных навыков в области разработки программного обеспечения.</p>
138
<p>Фильтры можно объединить. Они образуют единую цепочку. Соответствующий подход используется для уточнения информации:</p>
138
<p>Фильтры можно объединить. Они образуют единую цепочку. Соответствующий подход используется для уточнения информации:</p>
139
<p>Работает соответствующий прием так:</p>
139
<p>Работает соответствующий прием так:</p>
140
<ol><li>Сначала берутся все записи в пределах QuerySet.</li>
140
<ol><li>Сначала берутся все записи в пределах QuerySet.</li>
141
<li>Далее - добавляется фильтр.</li>
141
<li>Далее - добавляется фильтр.</li>
142
<li>После него разработчик устанавливает исключение и еще один фильтр. </li>
142
<li>После него разработчик устанавливает исключение и еще один фильтр. </li>
143
</ol><p>Результатом обработки предложенного кодового фрагмента станет QuerySet, который включает в себя все записи с заголовками "What". Во внимание будут приняты только записи, датированные с 30 января 2005 года по текущий момент.</p>
143
</ol><p>Результатом обработки предложенного кодового фрагмента станет QuerySet, который включает в себя все записи с заголовками "What". Во внимание будут приняты только записи, датированные с 30 января 2005 года по текущий момент.</p>
144
<h3>Уникальность</h3>
144
<h3>Уникальность</h3>
145
<p>Каждый раз при доработке QuerySet система предлагает разработчикам пользоваться "на выходе" совершенно новым QuerySet. Он не будет связан с предыдущим "хранилищем". Каждое уточнение влечет за собой создание отдельного и неповторимого элемента. Каждый такой уникальный QuerySet может храниться, а также повторно использоваться.</p>
145
<p>Каждый раз при доработке QuerySet система предлагает разработчикам пользоваться "на выходе" совершенно новым QuerySet. Он не будет связан с предыдущим "хранилищем". Каждое уточнение влечет за собой создание отдельного и неповторимого элемента. Каждый такой уникальный QuerySet может храниться, а также повторно использоваться.</p>
146
<p>Выше - три отдельных the QuerySets:</p>
146
<p>Выше - три отдельных the QuerySets:</p>
147
<ol><li>Первый - база. Он включает в себя все записи, заголовки которых начинаются с "What".</li>
147
<ol><li>Первый - база. Он включает в себя все записи, заголовки которых начинаются с "What".</li>
148
<li>Второй - подмножество первого. У него поддерживает дополнительный критерий. А именно - исключение записей, которые относятся по параметру pub_date к настоящему или будущему.</li>
148
<li>Второй - подмножество первого. У него поддерживает дополнительный критерий. А именно - исключение записей, которые относятся по параметру pub_date к настоящему или будущему.</li>
149
<li>Третий the objects - это подмножество первого с дополнительным критерием. Согласно действующей выборке, система отбирает все записи, относящиеся по pub_date к сегодняшнему или будущему.</li>
149
<li>Третий the objects - это подмножество первого с дополнительным критерием. Согласно действующей выборке, система отбирает все записи, относящиеся по pub_date к сегодняшнему или будущему.</li>
150
</ol><p>Существуют и иные методы рассматриваемого фреймворка. Они используются реже.</p>
150
</ol><p>Существуют и иные методы рассматриваемого фреймворка. Они используются реже.</p>
151
<h2>Прочие методы</h2>
151
<h2>Прочие методы</h2>
152
<p>В основном при работе с the Django objects filter предстоит использовать методы all, get, exclude и filter. Они не являются исчерпывающими. Разработчики могут задействовать другие команды, чтобы совершать более сложные манипуляции.</p>
152
<p>В основном при работе с the Django objects filter предстоит использовать методы all, get, exclude и filter. Они не являются исчерпывающими. Разработчики могут задействовать другие команды, чтобы совершать более сложные манипуляции.</p>
153
<h4><em>Ограничения</em></h4>
153
<h4><em>Ограничения</em></h4>
154
<p>Для ограничения QuerySets необходимо пользоваться синтаксическими подмножествами массивов Python. Соответствующий прием является аналогом внедрения Limit или offset предложений в the SQL.</p>
154
<p>Для ограничения QuerySets необходимо пользоваться синтаксическими подмножествами массивов Python. Соответствующий прием является аналогом внедрения Limit или offset предложений в the SQL.</p>
155
<p>Вот - наглядный пример возврата первых 5 объектов:</p>
155
<p>Вот - наглядный пример возврата первых 5 объектов:</p>
156
<p>Второй предложенный код используется для возврата объектов с 5 по 10 включительно. Стоит обратить внимание на то, что в Джанго отсутствует обратная (отрицательная) индексация.</p>
156
<p>Второй предложенный код используется для возврата объектов с 5 по 10 включительно. Стоит обратить внимание на то, что в Джанго отсутствует обратная (отрицательная) индексация.</p>
157
<h4><em>Поиск полей</em></h4>
157
<h4><em>Поиск полей</em></h4>
158
<p>Поиск по полю - это процесс, при котором необходимо указать основную часть предложения SQL where. Основные аргументы ключевых слов поиска представлены в форме field_lookuptype = value (двойное подчеркивание).</p>
158
<p>Поиск по полю - это процесс, при котором необходимо указать основную часть предложения SQL where. Основные аргументы ключевых слов поиска представлены в форме field_lookuptype = value (двойное подчеркивание).</p>
159
<p>Поле, написанное в поиске, должно выступать в качестве поля модели. Существует единственное исключение - когда ForeignKey допускает указание имени поля через суффикс _id. В соответствующей ситуации ожидается, что параметр значения будет включать в себя необработанный параметр первичного ключа внешней модели:</p>
159
<p>Поле, написанное в поиске, должно выступать в качестве поля модели. Существует единственное исключение - когда ForeignKey допускает указание имени поля через суффикс _id. В соответствующей ситуации ожидается, что параметр значения будет включать в себя необработанный параметр первичного ключа внешней модели:</p>
160
<p>При передаче the objects, который выражается недопустимым аргументом ключевого слова, система запустит функцию поиска под названием TypeError.</p>
160
<p>При передаче the objects, который выражается недопустимым аргументом ключевого слова, система запустит функцию поиска под названием TypeError.</p>
161
<p>В API базы данных поддерживаются порядка 20 типов поиска. Полноценную информацию рекомендуется искать в официальной документации.</p>
161
<p>В API базы данных поддерживаются порядка 20 типов поиска. Полноценную информацию рекомендуется искать в официальной документации.</p>
162
<h4><em>Точные совпадения</em></h4>
162
<h4><em>Точные совпадения</em></h4>
163
<p>Для того, чтобы искать в the objects "точные" совпадения, необходимо пользоваться специальным методом. Он называется exact. Вот - пример:</p>
163
<p>Для того, чтобы искать в the objects "точные" совпадения, необходимо пользоваться специальным методом. Он называется exact. Вот - пример:</p>
164
<p>Здесь произойдет генерирование в SQL:</p>
164
<p>Здесь произойдет генерирование в SQL:</p>
165
<p>Если разработчик не указал тип поиска (аргумент ключевого слова не имеет двойного подчеркивания), по умолчанию используется тип exact.</p>
165
<p>Если разработчик не указал тип поиска (аргумент ключевого слова не имеет двойного подчеркивания), по умолчанию используется тип exact.</p>
166
<h4><em>Без учета регистра</em></h4>
166
<h4><em>Без учета регистра</em></h4>
167
<p>Еще один интересный и полезный вариант поиска информации. Он позволяет "фильтровать" информацию в the objects без учета регистра. Для реализации операции используется метод iexact.</p>
167
<p>Еще один интересный и полезный вариант поиска информации. Он позволяет "фильтровать" информацию в the objects без учета регистра. Для реализации операции используется метод iexact.</p>
168
<p>В предложенном примере система будет искать все возможные вариации регистров во фразе "beatles blog".</p>
168
<p>В предложенном примере система будет искать все возможные вариации регистров во фразе "beatles blog".</p>
169
<h4><em>С учетом регистра</em></h4>
169
<h4><em>С учетом регистра</em></h4>
170
<p>Нередко при поиске информации от пользователей и разработчиков требуется учет регистра. Некоторые системы, приложения и поля чувствительны к нему. В the Django поиск соответствия с учетом регистра осуществляется за счет команды contains.</p>
170
<p>Нередко при поиске информации от пользователей и разработчиков требуется учет регистра. Некоторые системы, приложения и поля чувствительны к нему. В the Django поиск соответствия с учетом регистра осуществляется за счет команды contains.</p>
171
<p>В форме записи SQL запрос имеет следующую интерпретацию:</p>
171
<p>В форме записи SQL запрос имеет следующую интерпретацию:</p>
172
<p>Также можно использовать istartswith или iendswith.</p>
172
<p>Также можно использовать istartswith или iendswith.</p>
173
<h2>Кэширование и QuerySets</h2>
173
<h2>Кэширование и QuerySets</h2>
174
<p>При изучении the Django разработчику требуется учитывать различные особенности работы с упомянутым пакетом инструментов. Они заключаются не только в методах и запросах. Еще один момент, достойный внимания - кэширование.</p>
174
<p>При изучении the Django разработчику требуется учитывать различные особенности работы с упомянутым пакетом инструментов. Они заключаются не только в методах и запросах. Еще один момент, достойный внимания - кэширование.</p>
175
<p>Кеш в QuerySets поддерживается для того, чтобы минимизировать доступ к базе данных. Как только соответствующий компонент создается, его кэш пуст. Первых же вычисления возвращают явно запрошенные результаты. Пример - следующий элемент при той реализации итерации. Последующая оценка QuerySets будет производиться, опираясь на ранее сформированном кэше.</p>
175
<p>Кеш в QuerySets поддерживается для того, чтобы минимизировать доступ к базе данных. Как только соответствующий компонент создается, его кэш пуст. Первых же вычисления возвращают явно запрошенные результаты. Пример - следующий элемент при той реализации итерации. Последующая оценка QuerySets будет производиться, опираясь на ранее сформированном кэше.</p>
176
<p>Это значит, если один и тот же запрос в имеющейся базе данных будет выполнен несколько раз, система получит дополнительную нагрузку. Также не исключено, что два списка не могут включать в свой состав одинаковые записи БД.</p>
176
<p>Это значит, если один и тот же запрос в имеющейся базе данных будет выполнен несколько раз, система получит дополнительную нагрузку. Также не исключено, что два списка не могут включать в свой состав одинаковые записи БД.</p>
177
<h4><em>Когда кэширование отсутствует</em></h4>
177
<h4><em>Когда кэширование отсутствует</em></h4>
178
<p>Рассматриваемые запросы не всегда кэшируют результаты, полученные вследствие расчетов. Существует ряд ситуаций, при которых соответствующий момент не допускается. Пример - при оценке только части набора запросов при условии пустого изначально кэша. Элементы, которые будут возвращены последующей командой в системе, не будут кэшироваться. Это значит, что заполнению способствует ограничение набора запросов через срезы массивов или индексы.</p>
178
<p>Рассматриваемые запросы не всегда кэшируют результаты, полученные вследствие расчетов. Существует ряд ситуаций, при которых соответствующий момент не допускается. Пример - при оценке только части набора запросов при условии пустого изначально кэша. Элементы, которые будут возвращены последующей командой в системе, не будут кэшироваться. Это значит, что заполнению способствует ограничение набора запросов через срезы массивов или индексы.</p>
179
<p>Вот - многократное получение определенного индекса в the objects набора запросов. Каждый раз система будет запрашивать задействованную в процессе базу данных.</p>
179
<p>Вот - многократное получение определенного индекса в the objects набора запросов. Каждый раз система будет запрашивать задействованную в процессе базу данных.</p>
180
<p>Стоит учесть, что простая печать набора запросов не приводит к непосредственному заполнению кэша. Данное явление связывается с тем, что __repe__ возвращает только часть итогового query-набора.</p>
180
<p>Стоит учесть, что простая печать набора запросов не приводит к непосредственному заполнению кэша. Данное явление связывается с тем, что __repe__ возвращает только часть итогового query-набора.</p>
181
<h3>None - принцип работы</h3>
181
<h3>None - принцип работы</h3>
182
<p>При сохранении None, как и в случае с другими видами полей, значения будет сохраняться в SQL в качестве NULL. Можно сохранить скаляр JSON null вместо SQL-операции. Для этого используется запись типа value(‘null’). Пользоваться подобным приемом крайне не рекомендуется.</p>
182
<p>При сохранении None, как и в случае с другими видами полей, значения будет сохраняться в SQL в качестве NULL. Можно сохранить скаляр JSON null вместо SQL-операции. Для этого используется запись типа value(‘null’). Пользоваться подобным приемом крайне не рекомендуется.</p>
183
<p>Стоит запомнить что:</p>
183
<p>Стоит запомнить что:</p>
184
<ol><li>Если разработчик не готов работать с NULL-значениями SQL, ему рекомендуется воспользоваться параметром null=False.</li>
184
<ol><li>Если разработчик не готов работать с NULL-значениями SQL, ему рекомендуется воспользоваться параметром null=False.</li>
185
<li>Дополнительно предыдущая команда дополняется предоставлением значения по умолчанию для пустых значений типа default=dict.</li>
185
<li>Дополнительно предыдущая команда дополняется предоставлением значения по умолчанию для пустых значений типа default=dict.</li>
186
<li>Хранение скаляра JSON Null не нарушает принципа null=False.</li>
186
<li>Хранение скаляра JSON Null не нарушает принципа null=False.</li>
187
</ol><p>Выше можно увидеть пример того, как используется isnull для запроса SQL Null.</p>
187
</ol><p>Выше можно увидеть пример того, как используется isnull для запроса SQL Null.</p>
188
<h2>Сравнение объектов</h2>
188
<h2>Сравнение объектов</h2>
189
<p>При работе с двумя экземплярами модели в Джанго иногда возникает необходимость в их сравнении. Для этой цели используется стандартный оператор в Python - "==". Система будет сравнивать значения первичных ключей двух моделей.</p>
189
<p>При работе с двумя экземплярами модели в Джанго иногда возникает необходимость в их сравнении. Для этой цели используется стандартный оператор в Python - "==". Система будет сравнивать значения первичных ключей двух моделей.</p>
190
<p>Если первичный ключ модели не вызывается через id, никаких проблем не возникнет. При сравнении всегда используется первичный ключ, независимо от того, какое у него имя. Выше - пример, при котором вызывается поле первичного ключа модели name.</p>
190
<p>Если первичный ключ модели не вызывается через id, никаких проблем не возникнет. При сравнении всегда используется первичный ключ, независимо от того, какое у него имя. Выше - пример, при котором вызывается поле первичного ключа модели name.</p>
191
<h2>Копирование экземпляров</h2>
191
<h2>Копирование экземпляров</h2>
192
<p>The objects в Джанго не имеет встроенных методов копирования экземпляров модели. Данный момент не является проблемой. Вместо определенного метода разработчик может создать новый экземпляр со всеми скопированными значениями имеющихся полей.</p>
192
<p>The objects в Джанго не имеет встроенных методов копирования экземпляров модели. Данный момент не является проблемой. Вместо определенного метода разработчик может создать новый экземпляр со всеми скопированными значениями имеющихся полей.</p>
193
<p>В простейшей ситуации допускается установка pk в None и _state.adding к True. Вот - наглядный пример с блогом:</p>
193
<p>В простейшей ситуации допускается установка pk в None и _state.adding к True. Вот - наглядный пример с блогом:</p>
194
<p>Наследование здесь поддерживается, но оно только усложняет ситуацию. Поэтому разработчикам рекомендуется не пользоваться соответствующим приемом.</p>
194
<p>Наследование здесь поддерживается, но оно только усложняет ситуацию. Поэтому разработчикам рекомендуется не пользоваться соответствующим приемом.</p>
195
<h2>Как лучше изучить Джанго</h2>
195
<h2>Как лучше изучить Джанго</h2>
196
<p>Джанго - функциональный инструмент, для работы с которым требуются определенные навыки в Python и SQL. Предложенная выше информация об the objects и командах - это лишь начало. С ее помощью становятся понятны лишь некоторые аспекты фреймворка.</p>
196
<p>Джанго - функциональный инструмент, для работы с которым требуются определенные навыки в Python и SQL. Предложенная выше информация об the objects и командах - это лишь начало. С ее помощью становятся понятны лишь некоторые аспекты фреймворка.</p>
197
<p>Лучше всего для его быстрого освоения пользоваться дистанционными компьютерными онлайн-курсами. Весь учебный процесс на них организован в режиме "онлайн". Срок обучения - от нескольких месяцев до года. Можно не только совмещать сразу несколько направлений, но и выбрать курс в зависимости от имеющегося у пользователя изначально багажа знаний.</p>
197
<p>Лучше всего для его быстрого освоения пользоваться дистанционными компьютерными онлайн-курсами. Весь учебный процесс на них организован в режиме "онлайн". Срок обучения - от нескольких месяцев до года. Можно не только совмещать сразу несколько направлений, но и выбрать курс в зависимости от имеющегося у пользователя изначально багажа знаний.</p>
198
<p><a>Дистанционное обучение</a>Джанго и его особенностям сопровождается интересной практикой и домашними заданиями. В конце курса пользователь получит электронный сертификат, подтверждающий приобретенный спектр знаний и навыков.<a></a></p>
198
<p><a>Дистанционное обучение</a>Джанго и его особенностям сопровождается интересной практикой и домашними заданиями. В конце курса пользователь получит электронный сертификат, подтверждающий приобретенный спектр знаний и навыков.<a></a></p>
199
199