0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>3 авг 2022</li>
2
<ul><li>3 авг 2022</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Разберёмся в том, как устроен фреймворк Django, как он работает, и напишем своё первое приложение.</p>
4
</ul><p>Разберёмся в том, как устроен фреймворк Django, как он работает, и напишем своё первое приложение.</p>
5
<p>Иллюстрация: rawpixel.com / Freepik / mulyadi / Sebastian Dumitru / Unsplash / Дима Руденок для Skillbox Media</p>
5
<p>Иллюстрация: rawpixel.com / Freepik / mulyadi / Sebastian Dumitru / Unsplash / Дима Руденок для Skillbox Media</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
6
<p>Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.</p>
7
<p>Django - это фреймворк для веб-разработки, написанный на Python в 2005 году. Он позволяет создавать сайты и веб-приложения разной сложности - от личного блога до аудиоплатформы (на нём собран Spotify). От других фреймворков Django отличается модульностью и простотой освоения.</p>
7
<p>Django - это фреймворк для веб-разработки, написанный на Python в 2005 году. Он позволяет создавать сайты и веб-приложения разной сложности - от личного блога до аудиоплатформы (на нём собран Spotify). От других фреймворков Django отличается модульностью и простотой освоения.</p>
8
<p>В этой статье мы увидим, как создавать веб-приложения на Django: рассмотрим его структуру и напишем первое веб-приложение - движок для блога, который умеет публиковать и редактировать записи. Это первая часть урока по Django -<a>во второй</a>мы будем настраивать админку и подтюним внешний вид наших постов.</p>
8
<p>В этой статье мы увидим, как создавать веб-приложения на Django: рассмотрим его структуру и напишем первое веб-приложение - движок для блога, который умеет публиковать и редактировать записи. Это первая часть урока по Django -<a>во второй</a>мы будем настраивать админку и подтюним внешний вид наших постов.</p>
9
<p>Согласно<a>исследованию Stack Overflow</a>за 2022 год, Django занимает девятое место среди всех веб-фреймворков, обгоняя, например, популярные Spring и Ruby on Rails.</p>
9
<p>Согласно<a>исследованию Stack Overflow</a>за 2022 год, Django занимает девятое место среди всех веб-фреймворков, обгоняя, например, популярные Spring и Ruby on Rails.</p>
10
Фреймворк Django расположился в середине списка популярных веб-фреймворков<em>Скриншот:<a>Stack Overflow</a></em><p>На Django работают многие известные сервисы - например, "Инстаграм"*, Pinterest, Spotify, Last.fm и сайт Mozilla. Однако его используют не только в энтерпрайзе: нередко на нём собирают личные сайты: блоги, фотогалереи, портфолио и так далее.</p>
10
Фреймворк Django расположился в середине списка популярных веб-фреймворков<em>Скриншот:<a>Stack Overflow</a></em><p>На Django работают многие известные сервисы - например, "Инстаграм"*, Pinterest, Spotify, Last.fm и сайт Mozilla. Однако его используют не только в энтерпрайзе: нередко на нём собирают личные сайты: блоги, фотогалереи, портфолио и так далее.</p>
11
<p>Одно из главных преимуществ Django - принцип<a>DRY</a>(don’t repeat yourself): единожды написанный код можно повторно использовать в различных проектах. Поэтому Django часто сравнивают с конструктором Lego.</p>
11
<p>Одно из главных преимуществ Django - принцип<a>DRY</a>(don’t repeat yourself): единожды написанный код можно повторно использовать в различных проектах. Поэтому Django часто сравнивают с конструктором Lego.</p>
12
<p>Кроме принципа DRY Django имеет и другие преимущества:</p>
12
<p>Кроме принципа DRY Django имеет и другие преимущества:</p>
13
<ul><li>понятый и простой синтаксис (он написан на Python);</li>
13
<ul><li>понятый и простой синтаксис (он написан на Python);</li>
14
<li>большое количество готовых шаблонов и модулей, которые облегчают разработку и позволяют не использовать внешние библиотеки или расширения. Это помогает избегать конфликтов между ними после обновлений;</li>
14
<li>большое количество готовых шаблонов и модулей, которые облегчают разработку и позволяют не использовать внешние библиотеки или расширения. Это помогает избегать конфликтов между ними после обновлений;</li>
15
<li><a>подробная документация</a>и <a>большое комьюнити</a>. Если у вас появился какой-то вопрос о коде, то вы легко найдёте на него ответ на Stack Overflow или других сайтах.</li>
15
<li><a>подробная документация</a>и <a>большое комьюнити</a>. Если у вас появился какой-то вопрос о коде, то вы легко найдёте на него ответ на Stack Overflow или других сайтах.</li>
16
</ul><p>Фреймворк основывается на четырёх главных компонентах:</p>
16
</ul><p>Фреймворк основывается на четырёх главных компонентах:</p>
17
<ul><li>Модели (<a>Models</a>) - взаимодействуют с базой данных и достают из неё ту информацию, которую необходимо отобразить в браузере.</li>
17
<ul><li>Модели (<a>Models</a>) - взаимодействуют с базой данных и достают из неё ту информацию, которую необходимо отобразить в браузере.</li>
18
<li>Представления (<a>Views</a>) - обрабатывают запрос и обращаются к модели, сообщая ей, какую информацию необходимо достать из базы данных.</li>
18
<li>Представления (<a>Views</a>) - обрабатывают запрос и обращаются к модели, сообщая ей, какую информацию необходимо достать из базы данных.</li>
19
<li>Шаблоны (<a>Templates</a>) - показывают, каким именно образом необходимо показать информацию, полученную из базы данных.</li>
19
<li>Шаблоны (<a>Templates</a>) - показывают, каким именно образом необходимо показать информацию, полученную из базы данных.</li>
20
<li>URL-маршруты (<a>URL dispatcher</a>) - перенаправляют HTTP-запрос от браузера в представления.</li>
20
<li>URL-маршруты (<a>URL dispatcher</a>) - перенаправляют HTTP-запрос от браузера в представления.</li>
21
</ul><p>Сейчас структура может казаться запутанной, но на самом деле она простая - мы разберёмся с ней на практике, и вы быстро всё поймёте.</p>
21
</ul><p>Сейчас структура может казаться запутанной, но на самом деле она простая - мы разберёмся с ней на практике, и вы быстро всё поймёте.</p>
22
<p>Прежде чем перейти к установке Django и virtualenv, необходимо убедиться в том, что у вас уже установлен Python. Проверить это и узнать версию Python можно с помощью терминала. Откройте Terminal в своей IDE или операционной системе и введите команду:</p>
22
<p>Прежде чем перейти к установке Django и virtualenv, необходимо убедиться в том, что у вас уже установлен Python. Проверить это и узнать версию Python можно с помощью терминала. Откройте Terminal в своей IDE или операционной системе и введите команду:</p>
23
% python --version<p>Если Python установлен, то терминал покажет его версию:</p>
23
% python --version<p>Если Python установлен, то терминал покажет его версию:</p>
24
<em>Скриншот: Django / Skillbox Media</em><p>Если же Python не установлен, то можно<a>воспользоваться другим нашим руководством</a>. После этого переходим к настройке виртуального окружения.</p>
24
<em>Скриншот: Django / Skillbox Media</em><p>Если же Python не установлен, то можно<a>воспользоваться другим нашим руководством</a>. После этого переходим к настройке виртуального окружения.</p>
25
<p>Виртуальное окружение, создаваемое с помощью virtualenv, - это специальный инструмент, который помогает управлять зависимостями и изолировать проекты друг от друга: например, устанавливать дополнительные библиотеки и пакеты локально для каждого проекта, а не глобально для всего компьютера. Установить virtualenv тоже можно через терминал:</p>
25
<p>Виртуальное окружение, создаваемое с помощью virtualenv, - это специальный инструмент, который помогает управлять зависимостями и изолировать проекты друг от друга: например, устанавливать дополнительные библиотеки и пакеты локально для каждого проекта, а не глобально для всего компьютера. Установить virtualenv тоже можно через терминал:</p>
26
% sudo pip3 install virtualenv<p>После этого необходимо создать директорию для проекта, внутри которой мы развернём виртуальное окружение:</p>
26
% sudo pip3 install virtualenv<p>После этого необходимо создать директорию для проекта, внутри которой мы развернём виртуальное окружение:</p>
27
% mkdir blog % cd blog<p>С помощью команды mkdir мы создаём папку blog, а благодаря команде cd в терминале переходим в неё. Теперь папка blog - это каталог, где мы организуем виртуальное окружение и будем хранить все наши файлы, связанные с нашим проектом Django.</p>
27
% mkdir blog % cd blog<p>С помощью команды mkdir мы создаём папку blog, а благодаря команде cd в терминале переходим в неё. Теперь папка blog - это каталог, где мы организуем виртуальное окружение и будем хранить все наши файлы, связанные с нашим проектом Django.</p>
28
<p>Развернём виртуальное окружение внутри папки development:</p>
28
<p>Развернём виртуальное окружение внутри папки development:</p>
29
% virtualenv venv -p python3<p>Теперь его необходимо активировать, иначе оно не будет работать:</p>
29
% virtualenv venv -p python3<p>Теперь его необходимо активировать, иначе оно не будет работать:</p>
30
% source venv/bin/activate<p>После активации виртуального окружения мы увидим результат в самом терминале. Обратите внимание, что во второй строке команда теперь начинается с (venv), а не с (base), как раньше:</p>
30
% source venv/bin/activate<p>После активации виртуального окружения мы увидим результат в самом терминале. Обратите внимание, что во второй строке команда теперь начинается с (venv), а не с (base), как раньше:</p>
31
<em>Скриншот: Django / Skillbox Media</em><p>Сам фреймворк Django тоже устанавливается с помощью терминала:</p>
31
<em>Скриншот: Django / Skillbox Media</em><p>Сам фреймворк Django тоже устанавливается с помощью терминала:</p>
32
% pip install django<p>Результат установки:</p>
32
% pip install django<p>Результат установки:</p>
33
<em>Скриншот: Django / Skillbox Media</em><p>В последней строке видно, что установка прошла успешно. При этом мы установили не только Django последней версии, но и ещё две библиотеки:</p>
33
<em>Скриншот: Django / Skillbox Media</em><p>В последней строке видно, что установка прошла успешно. При этом мы установили не только Django последней версии, но и ещё две библиотеки:</p>
34
<ul><li><a>asgiref</a> - интерфейс для взаимодействия с асинхронными веб-сервисами, платформами и приложениями на Python;</li>
34
<ul><li><a>asgiref</a> - интерфейс для взаимодействия с асинхронными веб-сервисами, платформами и приложениями на Python;</li>
35
<li><a>sqlparse</a> - простой парсер для работы с базами данных SQL.</li>
35
<li><a>sqlparse</a> - простой парсер для работы с базами данных SQL.</li>
36
</ul><p>Итак, убедитесь, что вы сделали всё по чек-листу:</p>
36
</ul><p>Итак, убедитесь, что вы сделали всё по чек-листу:</p>
37
<ul><li>проверили, что у вас есть Python;</li>
37
<ul><li>проверили, что у вас есть Python;</li>
38
<li>создали директорию и развернули в ней виртуальное окружение с помощью virtualenv;</li>
38
<li>создали директорию и развернули в ней виртуальное окружение с помощью virtualenv;</li>
39
<li>установили в ту же папку Django.</li>
39
<li>установили в ту же папку Django.</li>
40
</ul><p>Теперь можно переходить к созданию самого проекта.</p>
40
</ul><p>Теперь можно переходить к созданию самого проекта.</p>
41
<p>Разобраться в основных понятиях фреймворка Django лучше всего на практике. Напишем веб-приложение для небольшого блога с текстовыми записями и поговорим про его работу. Весь процесс разобьём на семь простых шагов - да здравствует модульность :)</p>
41
<p>Разобраться в основных понятиях фреймворка Django лучше всего на практике. Напишем веб-приложение для небольшого блога с текстовыми записями и поговорим про его работу. Весь процесс разобьём на семь простых шагов - да здравствует модульность :)</p>
42
<h2><strong>Готовим и настраиваем окружение</strong></h2>
42
<h2><strong>Готовим и настраиваем окружение</strong></h2>
43
<p>Проще всего создать базовую структуру проекта с помощью терминала:</p>
43
<p>Проще всего создать базовую структуру проекта с помощью терминала:</p>
44
% django-admin startproject blog .<p>Очень важно не забыть точку в конце команды - она указывает на то, что проект создаётся в текущей папке без необходимости создания нового каталога. Если точку не поставить, то ничего не произойдёт и терминал выдаст ошибку.</p>
44
% django-admin startproject blog .<p>Очень важно не забыть точку в конце команды - она указывает на то, что проект создаётся в текущей папке без необходимости создания нового каталога. Если точку не поставить, то ничего не произойдёт и терминал выдаст ошибку.</p>
45
<p>Если всё прошло хорошо, то Django создаст в нашей директории blog файл manage.py, управляющий выполнением всех задач в терминале, и папку blog с пятью файлами:</p>
45
<p>Если всё прошло хорошо, то Django создаст в нашей директории blog файл manage.py, управляющий выполнением всех задач в терминале, и папку blog с пятью файлами:</p>
46
<em>Скриншот: Django / Skillbox Media</em><p>Мы не будем подробно обсуждать предназначение каждого из этих файлов - не все из них нам надо будет редактировать. Если вам интересны подробности, просто откройте файлы, в шапке каждого из них будет написано, для чего он нужен.</p>
46
<em>Скриншот: Django / Skillbox Media</em><p>Мы не будем подробно обсуждать предназначение каждого из этих файлов - не все из них нам надо будет редактировать. Если вам интересны подробности, просто откройте файлы, в шапке каждого из них будет написано, для чего он нужен.</p>
47
<p>Теперь нам надо продумать, где мы станем хранить записи блога. Для этого потребуется создать базу данных. Django может работать с различными базами данных, но по умолчанию работает с SQLite. Её нам будет достаточно - у нас всего один пользователь и простая структура записей.</p>
47
<p>Теперь нам надо продумать, где мы станем хранить записи блога. Для этого потребуется создать базу данных. Django может работать с различными базами данных, но по умолчанию работает с SQLite. Её нам будет достаточно - у нас всего один пользователь и простая структура записей.</p>
48
<p>Самое приятное - можно создать базу данных SQLite с помощью одной команды.</p>
48
<p>Самое приятное - можно создать базу данных SQLite с помощью одной команды.</p>
49
% python manage.py migrate<p>И всё. Если посмотреть в каталог проекта, вы увидите, что там появился файл db.sqlite3. Это и есть наша база данных.</p>
49
% python manage.py migrate<p>И всё. Если посмотреть в каталог проекта, вы увидите, что там появился файл db.sqlite3. Это и есть наша база данных.</p>
50
<p>Для работы с нашим блогом необходимо создать суперпользователя, обладающего возможностями администратора. Сделать это можно с помощью простой команды:</p>
50
<p>Для работы с нашим блогом необходимо создать суперпользователя, обладающего возможностями администратора. Сделать это можно с помощью простой команды:</p>
51
% python manage.py createsuperuser<p>После выполнения команды терминал попросит ввести имя пользователя, email и установить пароль. Запомните их - они нам ещё понадобятся.</p>
51
% python manage.py createsuperuser<p>После выполнения команды терминал попросит ввести имя пользователя, email и установить пароль. Запомните их - они нам ещё понадобятся.</p>
52
<p>Ещё одна команда, которой мы будем часто пользоваться - runserver. Она запускает веб-сервер для разработки:</p>
52
<p>Ещё одна команда, которой мы будем часто пользоваться - runserver. Она запускает веб-сервер для разработки:</p>
53
% python manage.py runserver<p>По умолчанию сервер запускается на порту 8000 по адресу 127.0.0.1 и доступен только на вашем компьютере. Порт и IP-адрес можно указать самостоятельно, но сейчас это нам не нужно.</p>
53
% python manage.py runserver<p>По умолчанию сервер запускается на порту 8000 по адресу 127.0.0.1 и доступен только на вашем компьютере. Порт и IP-адрес можно указать самостоятельно, но сейчас это нам не нужно.</p>
54
<p>Когда сервер запущен, вы можете открыть проект Django в браузере, введя http://127.0.0.1:8000 или http://localhost:8000. Если все предыдущие этапы выполнены правильно, вы увидите приветственное окно Django:</p>
54
<p>Когда сервер запущен, вы можете открыть проект Django в браузере, введя http://127.0.0.1:8000 или http://localhost:8000. Если все предыдущие этапы выполнены правильно, вы увидите приветственное окно Django:</p>
55
<em>Скриншот: Django / Skillbox Media</em><p>Завершим настройку нашего проекта и перейдём на страницу администрирования http://localhost:8000/admin. В форме введём имя и пароль суперпользователя, которые мы задали в предыдущем пункте. В результате нам откроется панель администратора:</p>
55
<em>Скриншот: Django / Skillbox Media</em><p>Завершим настройку нашего проекта и перейдём на страницу администрирования http://localhost:8000/admin. В форме введём имя и пароль суперпользователя, которые мы задали в предыдущем пункте. В результате нам откроется панель администратора:</p>
56
<em>Скриншот: Django / Skillbox Media</em><p>Панель администратора позволяет управлять контентом и пользователями сайта. Она понадобится нам на следующих этапах создания блога.</p>
56
<em>Скриншот: Django / Skillbox Media</em><p>Панель администратора позволяет управлять контентом и пользователями сайта. Она понадобится нам на следующих этапах создания блога.</p>
57
<p>Проект Django содержит одно или несколько приложений. Вначале можно запутаться между понятиями "проект" и "приложение", но разница между ними простая:</p>
57
<p>Проект Django содержит одно или несколько приложений. Вначале можно запутаться между понятиями "проект" и "приложение", но разница между ними простая:</p>
58
<ul><li>Приложение - это модуль нашего проекта. Оно может быть связано с конкретными функциями или группой пользователей. Например, если бы мы создавали социальную сеть, то сделали бы отдельные приложения для обычных пользователей, владельцев групп и модераторов контента.</li>
58
<ul><li>Приложение - это модуль нашего проекта. Оно может быть связано с конкретными функциями или группой пользователей. Например, если бы мы создавали социальную сеть, то сделали бы отдельные приложения для обычных пользователей, владельцев групп и модераторов контента.</li>
59
<li>Проект - это вся наша программа в целом. Она может состоять из одного приложения (именно так будет у нас) или из нескольких.</li>
59
<li>Проект - это вся наша программа в целом. Она может состоять из одного приложения (именно так будет у нас) или из нескольких.</li>
60
</ul><p>Разделение функций проекта по разным приложениям позволяет легко использовать единожды написанный код в разных проектах, быстро добавляя нужную функциональность.</p>
60
</ul><p>Разделение функций проекта по разным приложениям позволяет легко использовать единожды написанный код в разных проектах, быстро добавляя нужную функциональность.</p>
61
<p>В нашем случае нам достаточно хранить и отображать текстовые заметки, поэтому мы обойдёмся одним приложением. Назовём его entries. Прежде чем создать его, необходимо остановить работу сервера с помощью команды в терминале. Для этого нажмём комбинацию клавиш Ctrl + C в Windows или Control + C в macOS.</p>
61
<p>В нашем случае нам достаточно хранить и отображать текстовые заметки, поэтому мы обойдёмся одним приложением. Назовём его entries. Прежде чем создать его, необходимо остановить работу сервера с помощью команды в терминале. Для этого нажмём комбинацию клавиш Ctrl + C в Windows или Control + C в macOS.</p>
62
<p>Теперь создадим само приложение:</p>
62
<p>Теперь создадим само приложение:</p>
63
% python manage.py startapp entries<p>Эта команда создаст папку entries в проекте blog с набором предопределённых файлов (помните, что все эти команды терминала необходимо вводить в папке проекта). С некоторыми из них мы поработаем позже.</p>
63
% python manage.py startapp entries<p>Эта команда создаст папку entries в проекте blog с набором предопределённых файлов (помните, что все эти команды терминала необходимо вводить в папке проекта). С некоторыми из них мы поработаем позже.</p>
64
<em>Скриншот: Django / Skillbox Media</em><p>Пока что Django не видит созданное приложение entries. Чтобы его подключить, необходимо добавить название приложения в конец списка INSTALLED_APPS в файл blog/settings.py:</p>
64
<em>Скриншот: Django / Skillbox Media</em><p>Пока что Django не видит созданное приложение entries. Чтобы его подключить, необходимо добавить название приложения в конец списка INSTALLED_APPS в файл blog/settings.py:</p>
65
# Открываем файл blog/settings.py и добавляем в конец списка запись. INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'entries.apps.EntriesConfig', ]<p>Теперь приложение entries подключено к нашему проекту и Django видит его конфигурации. Одна из этих конфигураций - та самая модель, которая описывает, как записи блога должны выглядеть в базе данных.</p>
65
# Открываем файл blog/settings.py и добавляем в конец списка запись. INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'entries.apps.EntriesConfig', ]<p>Теперь приложение entries подключено к нашему проекту и Django видит его конфигурации. Одна из этих конфигураций - та самая модель, которая описывает, как записи блога должны выглядеть в базе данных.</p>
66
<p>После создания базы данных необходимо создать для неё таблицу, в которой будут храниться записи блога. В Django это делается с помощью<a>класса Models</a>. Как и обычные классы в Python, имена моделей принято задавать в единственном числе, и начинаться они должны с заглавной буквы. Так как наше приложение называется entries, модель будет называться Entry.</p>
66
<p>После создания базы данных необходимо создать для неё таблицу, в которой будут храниться записи блога. В Django это делается с помощью<a>класса Models</a>. Как и обычные классы в Python, имена моделей принято задавать в единственном числе, и начинаться они должны с заглавной буквы. Так как наше приложение называется entries, модель будет называться Entry.</p>
67
<p>Поля Entry - это элементы, которыми будет обладать любая запись в блоге. На самом сайте они будут показаны в виде полей формы, а в базе данных - столбцами. У записи в блоге будет три элемента:</p>
67
<p>Поля Entry - это элементы, которыми будет обладать любая запись в блоге. На самом сайте они будут показаны в виде полей формы, а в базе данных - столбцами. У записи в блоге будет три элемента:</p>
68
<ul><li>title - заголовок;</li>
68
<ul><li>title - заголовок;</li>
69
<li>content - основной текст;</li>
69
<li>content - основной текст;</li>
70
<li>date_created - дата и время создания.</li>
70
<li>date_created - дата и время создания.</li>
71
</ul><p>В файле entries/models.py сначала импортируем модуль timezone из django.utils, а затем создадим класс Entry (в комментариях поясняется, за что отвечает тот или иной кусочек кода):</p>
71
</ul><p>В файле entries/models.py сначала импортируем модуль timezone из django.utils, а затем создадим класс Entry (в комментариях поясняется, за что отвечает тот или иной кусочек кода):</p>
72
from django.db import models from django.utils import timezone class Entry(models.Model): # Создаём новый класс, который будет служить для блога моделью, указывая все необходимые элементы. title = models.CharField(max_length=200) content = models.TextField() date_created = models.DateTimeField(default=timezone.now) def __str__(self): # С помощью функции меняем то, как будет представлена запись в модели. return self.title # Указываем, что она будет идентифицироваться с помощью своего заголовка. class Meta: verbose_name_plural = "Entries" # Указываем правильное написание для множественного числа слова Entry.<p>После импорта модуля timezone мы можем использовать параметр timezone.now в качестве аргумента по умолчанию для date_created. Теперь при создании новой записи не придётся вручную указывать время и дату. Это пригодится нам позже, когда мы будем создавать форму для создания постов.</p>
72
from django.db import models from django.utils import timezone class Entry(models.Model): # Создаём новый класс, который будет служить для блога моделью, указывая все необходимые элементы. title = models.CharField(max_length=200) content = models.TextField() date_created = models.DateTimeField(default=timezone.now) def __str__(self): # С помощью функции меняем то, как будет представлена запись в модели. return self.title # Указываем, что она будет идентифицироваться с помощью своего заголовка. class Meta: verbose_name_plural = "Entries" # Указываем правильное написание для множественного числа слова Entry.<p>После импорта модуля timezone мы можем использовать параметр timezone.now в качестве аргумента по умолчанию для date_created. Теперь при создании новой записи не придётся вручную указывать время и дату. Это пригодится нам позже, когда мы будем создавать форму для создания постов.</p>
73
<p>В дополнение к title, content и date_created Django автоматически добавит id как уникальный первичный ключ для всех записей. Строковое представление записи с первичным ключом 1 по умолчанию будет Entry object (1). Добавив функцию __str__(), мы настраиваем то, что будет отображаться вместо этой нумерации. Так как мы создаём блог, то лучше идентифицировать запись с помощью заголовка.</p>
73
<p>В дополнение к title, content и date_created Django автоматически добавит id как уникальный первичный ключ для всех записей. Строковое представление записи с первичным ключом 1 по умолчанию будет Entry object (1). Добавив функцию __str__(), мы настраиваем то, что будет отображаться вместо этой нумерации. Так как мы создаём блог, то лучше идентифицировать запись с помощью заголовка.</p>
74
<p>Ещё одна переменная, которую необходимо настроить вручную, - это verbose_name_plural. Если этого не сделать, то Django будет неправильно указывать множественное число Entry как Entrys (нам надо Entries).</p>
74
<p>Ещё одна переменная, которую необходимо настроить вручную, - это verbose_name_plural. Если этого не сделать, то Django будет неправильно указывать множественное число Entry как Entrys (нам надо Entries).</p>
75
<p>Чтобы наша модель Entry отображалась в панели администрирования Django, регистрируем её в файле entries/admin.py:</p>
75
<p>Чтобы наша модель Entry отображалась в панели администрирования Django, регистрируем её в файле entries/admin.py:</p>
76
from django.contrib import admin from .models import Entry admin.site.register(Entry) # Регистрируем модель.<p>Если этого не сделать, то Django не выдаст ошибку, однако при работе с блогом возможности управлять моделью через панель администратора уже не будет, а это неудобно.</p>
76
from django.contrib import admin from .models import Entry admin.site.register(Entry) # Регистрируем модель.<p>Если этого не сделать, то Django не выдаст ошибку, однако при работе с блогом возможности управлять моделью через панель администратора уже не будет, а это неудобно.</p>
77
<p>После добавления нового класса и его регистрации в панели администратора необходимо создать файлы миграции для Django и запустить их. Создаются они с помощью команды makemigrations, а реализуются через команду migrate. Обе команды пишем в терминале:</p>
77
<p>После добавления нового класса и его регистрации в панели администратора необходимо создать файлы миграции для Django и запустить их. Создаются они с помощью команды makemigrations, а реализуются через команду migrate. Обе команды пишем в терминале:</p>
78
python manage.py makemigrations python manage.py migrate<p>После завершения миграции переходим в панель администратора http://localhost:8000/admin. В ней появился раздел Entries с нашим приложением:</p>
78
python manage.py makemigrations python manage.py migrate<p>После завершения миграции переходим в панель администратора http://localhost:8000/admin. В ней появился раздел Entries с нашим приложением:</p>
79
<em>Скриншот: Django / Skillbox Media</em><p>Сейчас в этом разделе нет никаких записей. Можно добавить их вручную, нажав Add. Однако удобнее реализовать добавление новых записей в блог через пользовательский интерфейс, а не панель администратора. Но это мы сделаем в следующей части статьи - следите за анонсами в <a>Telegram-канале "Люди и код"</a>и подписывайтесь на нашу<a>рассылку</a>, чтобы не пропустить.</p>
79
<em>Скриншот: Django / Skillbox Media</em><p>Сейчас в этом разделе нет никаких записей. Можно добавить их вручную, нажав Add. Однако удобнее реализовать добавление новых записей в блог через пользовательский интерфейс, а не панель администратора. Но это мы сделаем в следующей части статьи - следите за анонсами в <a>Telegram-канале "Люди и код"</a>и подписывайтесь на нашу<a>рассылку</a>, чтобы не пропустить.</p>
80
<p>* Решением суда запрещена "деятельность компании Meta Platforms Inc. по реализации продуктов - социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности".</p>
80
<p>* Решением суда запрещена "деятельность компании Meta Platforms Inc. по реализации продуктов - социальных сетей Facebook и Instagram на территории Российской Федерации по основаниям осуществления экстремистской деятельности".</p>
81
<p>Python для всех</p>
81
<p>Python для всех</p>
82
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
82
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
83
<p><a>Пройти бесплатно</a></p>
83
<p><a>Пройти бесплатно</a></p>
84
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>
84
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>