JavaRush /Курсы /Модуль 3: Django /Основные компоненты Django

Основные компоненты Django

Модуль 3: Django
1 уровень , 9 лекция
Открыта

Сегодня мы разберёмся в основных компонентах 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

Пример взаимодействия компонентов

Давайте соберём всё вместе:

  1. Создаём модель BlogPost.
  2. Регистрируем её в админке.
  3. Пишем функцию представления, чтобы вывести список постов.
  4. Добавляем маршрут в urls.py.
  5. Пишем шаблон для отображения постов.

Функция представления:

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/ и увидеть ваши записи, красиво отрендеренные в браузере.

1
Задача
Модуль 3: Django, 1 уровень, 9 лекция
Недоступна
Создание простой модели Django
Создание простой модели Django
1
Задача
Модуль 3: Django, 1 уровень, 9 лекция
Недоступна
Работа с данными из модели в представлении
Работа с данными из модели в представлении
3
Опрос
Создание нового проекта Django, 1 уровень, 9 лекция
Недоступен
Создание нового проекта Django
Создание нового проекта Django
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ