Веб-программирование → Основы Django фреймворка
В предыдущей статье я рассказал как создать django проект и запустить его. Здесь я расскажу из чего состоит Django и как на нем сделать простое веб-приложение.
Расскажу о трех важных вещах в Django:
1. urls - пути сайта
2. views - обработчики или контроллеры(вьюшки)
3. templates - шаблоны(html - файлы)
Цикл всех статей про Django:
1. Создаем веб-приложение на Django 4.0.4
2. Основы Django фреймворка
3. Статические файлы (js, css, картинки) в Django
4. Расширение html-файлов в Django
5. Регистрация в Django
6. Модели и Базы данных в Django
1. Urls - пути (или урлы)
В прошлой статье мы создали проект с названием mysite. Можете открыть весь ваш проект в PyCharm.
У вас должна быть примерна такая структура проекта:
В папке mysite у есть файл urls.py, в котором перечислены какие страницы(пути) есть в вашем веб-приложении. В начале проекта этот файл выглядит так:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
Тут есть только один путь - путь в админку сайта.
Для джанго не важно где находится ваш сайт, по каком ip-адресу, домену или на каком порту он стоит. Пусть хоть entezeer.com, master.ru, 120.122.33.3 или localhost:8000. Ему важно что идет за названием сайта т.е. путь.
Например если мы откроем страницу http://localhost:8000/profile/, то Джанго будет смотреть только на часть после http://localhost:8000/, а именно на profile/. И на основе этой пути, Django будет думать как обработать или что показать. И все вот такие пути, которые могут быть на нашем сайте мы должны прописать в файле urls.py.
Сейчас нам нужно создать две страницы: Главную и страницу контактов например. У главной страницы всегда путь пустой, потому что она отображается когда мы вводим только адрес сайта. А у страницы контактов пусть будет путь contacts/. Укажем это в файле urls.py перед путью в админку:
urlpatterns = [
path('', HomeView.as_view()),
path('contacts/', ContactsView.as_view()),
path('admin/', admin.site.urls),
]
В функцию path() мы сначала передаем часть пути и через запятую мы пишем что будет обрабатывать запрос на эту страницу. В нашем случаем это классы HomeView и ContactsView, которые мы создадим ниже. PyCharm будет показывать ошибку что HomeView и ContactsView не найдены. Пока не обращайте на это внимания, мы их создадим позже.
2. Views - обработчики (или вьюшки)
Вьюшки это самая важная часть Django приложения, они будут обрабатывать запросы, решать что нужно делать и отправлять ответ пользователю. Вся бизнес-логика будет начинаться здесь.
Они принимают запрос(request) и возвращают ответ(response). В Джанго есть много разных типов вьюшек, для разных задач. Мы будем использовать TemplateView, который умеет рендерить(создавать) html-страницы по шаблону. А Шаблонами в джанго также являются html-файлы, которые могут содержать разные django-команды и операции.
Теперь продолжим создавать сайт. Для вьюшек мы создадим файл views.py в папке mysite рядом с файлом urls.py. И в нем создадим два класса HomeView и ContactsView, которые будут наследовать класс TemplateView.
from django.views.generic import TemplateView
class HomeView(TemplateView):
pass
class ContactsView(TemplateView):
pass
Наши классы пока пустые. Как видите я импортировал TemplateView из пакета django.views.generic. В PyCharm можно сделать импорт с помощью Alt-Enter, если вы не хотите сами писать from ... import ...
Теперь для этих классов укажем какие шаблоны они будут использовать. Для этого внутри класса укажем поле template_name.
class HomeView(TemplateView):
template_name = "home.html"
class ContactsView(TemplateView):
template_name = "contacts.html"
Эти шаблоны мы создадим ниже, а до этого мы должны классы HomeView и ContactsView подключить в файл urls.py, так как, мы там на них ссылаемся. Для этого откройте urls.py и рядом с другими импортами напишите:
from mysite.views import HomeView, ContactsView
Или можете также Alt-Enter использовать в PyCharm (Поставьте курсор ввода на HomeView и нажмите Alt+Enter (Option+Enter на Mac) и затем выберите пункт Import).
Теперь перейдем к шаблонам.
3. Templates - шаблоны (html - файлы)
Шаблоны это обычные html-файлы, где мы пишем обычный html-код наших страниц, чтобы отобразить их потом в браузере. Также шаблоны могут содержать разные django-команды и операции, чтобы мы там могли по разному отображать наши данные.
Шаблоны могут быть переиспользованы, расширены, наследованы, подключаться друг в друга и т.д. Но про это потом.
Они обычно находятся в папке templates. Создайте папку templates внутри папки mysite. Чтобы у вас было так:
Затем откройте файл settings.py и найдите константу INSTALLED_APPS и добавьте наш mysite в конец списка
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mysite'
]
INSTALLED_APPS - это все подключенные django аппы в наш проект. Как вы видите, там уже есть несколько аппов, которые заранее подключены. Т.е. наш проект по умолчанию умеет делать некоторые вещи. Чтобы мы могли свое приложение сделать и использовать, наш апп тоже сюда нужно зарегистрировать.
Обычно Django берет шаблоны из папки templates каждого аппа.
Теперь Django знает где мы собираемся создавать шаблоны. Создадим два html-файла в папке templates: home.html и contacts.html.
home.html:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Главная страница сайта</title>
</head>
<body>
<h1>Это Главная страница сайта</h1>
</body>
</html>
contacts.html:
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Контакты</title>
</head>
<body>
<h1>Контакты</h1>
<dl>
<dt>Email</dt>
<dd>masteraalish@gmail.com</dd>
<dt>Tel</dt>
<dd>+996 778 999 999</dd>
</dl>
</body>
</html>
Шаблоны готовы. Теперь запустим сайт с командной строки:
python manage.py runserver
Или в PyCharm сверху нажмите на зеленую треугольную кнопку
Откройте браузер по адресу localhost:8000 и вы должны увидеть текст "Это главная страница сайта". Затем откройте страницу localhost:8000/contacts/ и вы увидите страницу контактов.
На этом все.
В Html файле вы можете прописывать все что вы хотите. Подключать JS скрипты и стили CSS например.
Следующая статья про Django: Статические файлы (js, css, картинки) в Django