HTML Diff
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