Сегодня мы разберёмся в основных компонентах Django, которые делают этот фреймворк таким магическим и полезным. А в самом конце лекции вы поймёте: ничего магического тут нет — только хорошо продуманная структура.
Представьте себе Django как кузнечный инструмент для веб-разработки. Чтобы создать веб-приложение, вы должны понимать, из каких частей состоит этот инструмент, как они взаимодействуют между собой. Это не только поможет вам писать код эффективнее, но и убережёт от типичных ошибок. Двигаясь вперёд, понимание этих принципов позволит вам создавать гибкие, масштабируемые приложения, которые соответствуют принципу DRY (Don’t Repeat Yourself).
Так что пристёгивайтесь, друзья, мы отправляемся в тур по ключевым компонентам Django!
Архитектурный подход Django: MTV
Вы наверняка слышали о MVC (Model-View-Controller) — одном из самых популярных архитектурных паттернов для построения приложений. Django использует его адаптированную версию, которую называет MTV (Model-Template-View).
Вот краткое сопоставление MTV с MVC:
| MVC | MTV |
|---|---|
| Model | Model |
| View | Template |
| Controller | View |
Подробно:
- Model: работает с данными, описывает структуру базы данных и предоставляет API для их обработки.
- Template: отвечает за отображение данных пользователю. Здесь мы определяем, как наши страницы выглядят.
- View: логика обработки запросов. Именно здесь происходит магия связывания моделей и шаблонов.
Основные компоненты Django
Теперь, когда мы знаем про MTV, давайте разберём ключевые элементы, которые играют важнейшую роль в каждом Django-приложении.
1. Модели (Models)
Модели — это основа взаимодействия с базой данных. В Django модели определяются в файле models.py внутри каждого приложения. Каждый класс модели трансформируется в таблицу в базе данных.
Пример модели:
from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length=100) # Текстовое поле с ограничением длины
content = models.TextField() # Большое текстовое поле
author = models.CharField(max_length=50) # Автор поста
created_at = models.DateTimeField(auto_now_add=True) # Дата создания
def __str__(self):
return self.title # Для удобного отображения в админке
Почему это важно? Каждый раз, когда вы работаете с данными (добавляете, изменяете, удаляете), вы взаимодействуете с моделями. Они — основа для всей логики работы с данными.
2. Представления (Views)
Представления в Django — это "контроллеры" между пользователем и вашей бизнес-логикой. Здесь происходит обработка запросов и передача данных в шаблоны.
Пример функции представления:
from django.http import HttpResponse
def homepage(request):
return HttpResponse("Добро пожаловать на наш сайт!")
Пример чуть сложнее, возвращающий HTML-шаблон:
from django.shortcuts import render
def homepage(request):
context = {"greeting": "Добро пожаловать на наш сайт!"}
return render(request, 'home.html', context)
Наблюдаете, как шаблон и представление взаимодействуют друг с другом? Это ключ.
3. Шаблоны (Templates)
Шаблоны управляют фронтендом: HTML, CSS и, возможно, немного JavaScript. Django предлагает собственный язык шаблонов — Django Template Language (DTL).
Пример шаблона home.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Главная</title>
</head>
<body>
<h1>{{ greeting }}</h1>
</body>
</html>
Всё, что заключено в двойные фигурные скобки {{ }}, это плейсхолдеры для данных, переданных из представления.
4. Маршрутизация (URLs)
Когда пользователь заходит на сайт, он видит URL-адрес в браузере. Например, www.myblog.com/home. Django должен "понять", как обработать этот запрос. Для этого мы создаём маршруты в файле urls.py.
Пример файла urls.py:
from django.urls import path
from . import views # Импортируем наши представления
urlpatterns = [
path('', views.homepage, name='homepage'), # Связываем маршрут с функцией homepage
]
5. Админ-панель (Admin)
Django предоставляет встроенную удобную админ-панель, которая позволяет управлять контентом, не прибегая к SQL. Чтобы работать с моделью в админке, её нужно зарегистрировать.
Пример регистрации модели в admin.py:
from django.contrib import admin
from .models import BlogPost
admin.site.register(BlogPost)
Это добавит возможность управлять записями модели BlogPost в админке.
6. Файлы настроек (Settings)
Файл settings.py содержит конфигурацию вашего проекта: базы данных, настройки статических файлов, параметры безопасности. Вот как это выглядит:
Пример:
DEBUG = True # Включен режим отладки
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / "db.sqlite3",
}
}
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # Добавляем наше приложение "blog"
]
7. Статические файлы (Static Files)
Ваши CSS-, JS-, и изображения попадают в категорию "статических файлов". Django предоставляет механизмы для их управления через STATIC_URL и STATICFILES_DIRS.
Пример:
STATIC_URL = '/static/' # Основной путь для статических файлов
STATICFILES_DIRS = [
BASE_DIR / "static", # Папка, где будут храниться статические файлы
]
8. Миграции
Миграции — это механизм синхронизации моделей с базой данных. При создании или изменении модели Django генерирует миграцию, которая затем применяется к базе данных.
Пример:
# Создание миграции
python manage.py makemigrations
# Применение миграции
python manage.py migrate
Пример взаимодействия компонентов
Давайте соберём всё вместе:
- Создаём модель
BlogPost. - Регистрируем её в админке.
- Пишем функцию представления, чтобы вывести список постов.
- Добавляем маршрут в
urls.py. - Пишем шаблон для отображения постов.
Функция представления:
from django.shortcuts import render
from .models import BlogPost
def blog_posts(request):
posts = BlogPost.objects.all() # Получаем все посты
return render(request, 'blog_posts.html', {'posts': posts})
Шаблон blog_posts.html:
<!DOCTYPE html>
<html>
<head>
<title>Наши посты</title>
</head>
<body>
<h1>Список постов</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }} - {{ post.author }}</li>
{% endfor %}
</ul>
</body>
</html>
Маршрут:
from django.urls import path
from . import views
urlpatterns = [
path('posts/', views.blog_posts, name='blog_posts'),
]
Теперь можно перейти по адресу /posts/ и увидеть ваши записи, красиво отрендеренные в браузере.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ