Heroku — создаем небольшой сайт на Django и запускаем его (Часть 1)

Сегодня невозможно представить деятельность компании или частного лица без создания сайта, через который будут продвигаться их услуги. И чтобы создать такой веб-ресурс, который будет соответствовать вашим задачам, было возможно, существует специальный Python-фреймворк Django. 

Сегодня мы попробуем создать программу Pages, которая имеет свою домашнюю страницу, а также страницу с описанием проекта. Мы выучим существующие классовые представления и шаблоны фреймворка Django, с помощью которых можно строить сложные программы.

Как провести первоначальную настройку программы в Django?

Конечно, перед использованием любого инструмента его необходимо предварительно настроить. Для этого необходимо пройти следующие этапы:

  1. Создать папку, в которой будет храниться код.
  2. Осуществить установку Django в новой виртуальной среде.
  3. Создать новый Django-проект.
  4. Создать приложение pages
  5. Обновить файл 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/. После этого перед нами должна появиться главная страница.Heroku - создаем небольшой сайт на Django и запускаем его (Часть 1)

Выводы

Сегодня мы попробовали создать главную страницу сайта на   Django. Конечно, большинство веб-ресурсов состоит не только из главной страницы, но и множества других. Например, страницы «О нас». Но их создание имеет некоторые особенности, которые необходимо рассматривать отдельно. 

Так что еще будет ⇒ продолжение. А пока попробуйте создать главную страницу вашего сайта самостоятельно, используя инструкции, которые были приведены нами сегодня. 

ОфисГуру
Adblock
detector