Сегодня невозможно представить деятельность компании или частного лица без создания сайта, через который будут продвигаться их услуги. И чтобы создать такой веб-ресурс, который будет соответствовать вашим задачам, было возможно, существует специальный Python-фреймворк Django.
Сегодня мы попробуем создать программу Pages, которая имеет свою домашнюю страницу, а также страницу с описанием проекта. Мы выучим существующие классовые представления и шаблоны фреймворка Django, с помощью которых можно строить сложные программы.
Как провести первоначальную настройку программы в Django?
Конечно, перед использованием любого инструмента его необходимо предварительно настроить. Для этого необходимо пройти следующие этапы:
- Создать папку, в которой будет храниться код.
- Осуществить установку Django в новой виртуальной среде.
- Создать новый Django-проект.
- Создать приложение pages.
- Обновить файл setting.py.
Когда вы запустите командную строку либо терминал (если вы используете компьютер на основе Linux), с которой нам придется сегодня работать, необходимо удостовериться, что вы сейчас не находитесь в виртуальном окружении, которое запущено. Как это можно проверить? По тексту в скобках, который находится перед знаком доллара ($).
Если это так, то необходимо выполнить команду exit, чтобы произвести его деактивацию. Простыми словами, остановить его.
Далее нам необходимо создать дополнительную папку, которая будет называться pages на рабочем столе либо в каком-угодно другом месте. Самое важное, чтобы можно было легко получить доступ к ней, а также не было пересечения с другими проектами.
В повторно открытой командной строке необходимо ввести такой код:
$ cd ~/Desktop $ mkdir pages && cd pages $ pipenv install django==3.0.* $ pipenv shell (pages) $ django-admin startproject pages_project . (pages) $ python manage.py startapp pages
Далее запускаете файл settings.py в любом текстовом редакторе. Конечно, лучше использовать полноценный редактор кода. В самом низу списка INSTALLED_APPS необходимо добавить новое приложение pages.
# pages_project/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'pages.apps.PagesConfig', # новое ]
Используем команду runserver, чтобы запустить локальный сервер.
(pages) $ python manage.py runserver
После этого открываем страницу http://127.0.0.1:8000/.
Как использовать шаблоны в Django
Все веб-фреймворки нуждаются в том, чтобы был удобный метод генерации HTML-файлов. Ведь именно HTML-страницы выводятся непосредственно человеку в браузере. Как это реализовано в Django? С помощью шаблонов. Это специальные HTML-файлы, которые связываются друг с другом и включают стандартные логические операции.
Если вы пробовали создать программу «Hello, World» ранее с помощью Django, то там вы вписывали эту фразу непосредственно в код файла views.py, поскольку ею игнорировались все HTML-шаблоны. Конечно, такой вариант возможен, но если необходимо масштабировать такой код, то это будет тяжело сделать. Гораздо лучше будет связать представление с шаблоном, и таким образом информацию из каждого отделять.
В этом уроке мы попробуем понять, как правильно применять шаблоны для генерации главной страницы, а также второй страницы, в которой будет описываться проект. Далее можно будет пользоваться шаблонами для создания сайтов с сотнями, тысячами и даже миллиардами страничек. И при этом почти не использовать код. Как это сделать?
Давайте сперва попробуем определить, где разместить шаблоны внутри структуры Django-проекта. Тут мы имеем два варианта действий. Согласно предустановленным параметрам, загрузчик шаблонов Django осмотрит каждую программу, осуществляя поиск связанных шаблонов. Впрочем, структура по-прежнему может путать новичков, поскольку каждое приложение требует того, чтобы была отдельная папка templates, а также другой папки, которая будет иметь такое же имя, а также файла шаблона.
Поэтому, когда мы начнем разбирать приложение pages на составляющие, получим приблизительно такую структуру.
└── pages
├── templates
├── pages
├── home.html
Отсюда можно сделать вывод, что нам необходимо будет создать новую папку templates, новую папку, которая будет иметь такое же название, что и наше приложение (то бишь, pages), а также непосредственно сам шаблон, который будет называться home.html.
Здесь появляется вопрос: зачем вообще такой подход нужен. Все потому, что загрузчиком шаблонов Django должен точно быть найден требуемый шаблон. Что произойдет, если будет два разных файла home.html в пределах двух разных приложений? Это вызовет определенные конфликты. Если же использовать структуру, подобную описанной выше, можно будет их избежать.
В первую очередь, необходимо остановить тот сервер, который работает в данный момент. Для этого, как вы могли помнить, необходимо воспользоваться комбинацией CTRL+C. После этого мы добавляем новую папку, которая будет называться templates, а также файл home.html.
(pages) $ mkdir templates (pages) $ touch templates/home.html
Затем нам следует скорректировать содержимое файла settings.py, указав Django расположение новой папки templates. Это изменение происходит в одну строчку в настройках ‘DIRS’ под TEMPLATES.
# pages_project/settings.py TEMPLATES = [ { ... 'DIRS': [os.path.join(BASE_DIR, 'templates')], # new ... }, ]
После этого, для файла home.html необходимо добавить стандартный заголовок типа H1.
<!-- templates/home.html --> <h1>Homepage</h1>
На этом наш шаблон уже создан. Далее нам необходимо сконфигурировать URL-файл, а также файлы представления.
Классовые представления в Django
Предыдущими версиями Django поддерживались исключительно функциональные представления (которые базировались на функции). Тем не менее, в ходе их создания сразу стало понятно, что тогда потребуется регулярно повторять тот же паттерн. Например, осуществлять написание представления, которое будет составлять список всех объектов, которые включает определенная модель. А потом писать представление, которое будет демонстрировать исключительно один детализированный элемент этой модели. И так по цепочке.
С помощью функциональных представлений-генериков можно избежать необходимости постоянно повторять один и тот же монотонный паттерн. Тем не менее, расширение возможностей тех, которые есть либо их правильное редактирование – это не такая легкая задача, как оказалось. Как следствие, в Django появилась возможность создать классовые представления-генерики, доступные для использования и позволяющие адаптировать те представления, которые есть, под наиболее частые требования.
Классы – это главная часть Python. В нашем представлении для показа шаблона нами используется встроенный TemplateView. Давайте внесем соответствующие изменения в файл pages/views.py.
# pages/views.py from django.views.generic import TemplateView class HomePageView(TemplateView): template_name = 'home.html'
Необходимо учесть то, что нами был использован стиль CamelCase для представления HomePageView, поскольку теперь он стал классом. Имена классов, в отличие от имен функций, всегда должны писаться с большой буквы. TemplateView уже включает все логические операции, которые требуются для показа шаблона. Все, что остается – это уточнить его имя.
Как осуществить настройку URL для Django-приложения
На финальном этапе нам требуется обновить URLConfs. В двух местах это нужно делать. В первую очередь, необходимо внести изменения в файл непосредственно самого проекта pages_project/urls.py, чтобы отметить нашу программу pages, после чего внутри приложения pages нам необходимо связать представления с URL-адресами.
Давайте начнем с файла pages_project/urls.py.
# pages_project/urls.py from django.contrib import admin from django.urls import path, include # новое urlpatterns = [ path('admin/', admin.site.urls), path('', include('pages.urls')), # новое ]
Этот код уже вам может быть знаком, если вы ранее имели опыт разработки приложений на Django. На второй строчке нам необходимо добавить include, что требуется для ввода имеющегося URL-адреса для приложения pages. После этого необходимо создать файл urls.py на уровне приложений.
(pages) $ touch pages/urls.py
И после этого добавить такой код.
# pages/urls.py from django.urls import path from .views import HomePageView urlpatterns = [ path('', HomePageView.as_view(), name='home'), ]
Фактически этот паттерн почти такой же самый, как в некоторых других подобных проектах. Тем не менее, у него есть ключевая особенность. Во время применения классовых представлений в конце его имени необходимо добавить as_view().
На этом все. Теперь необходимо попробовать включить веб-сервер, воспользовавшись командой python manage.py, после чего открыть http://127.0.0.1:8000/. После этого перед нами должна появиться главная страница.
Выводы
Сегодня мы попробовали создать главную страницу сайта на Django. Конечно, большинство веб-ресурсов состоит не только из главной страницы, но и множества других. Например, страницы «О нас». Но их создание имеет некоторые особенности, которые необходимо рассматривать отдельно.
Так что еще будет ⇒ продолжение. А пока попробуйте создать главную страницу вашего сайта самостоятельно, используя инструкции, которые были приведены нами сегодня.