JavaRush /Курсы /Модуль 3: Django /Пример структуры приложения: views, urls, models

Пример структуры приложения: views, urls, models

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

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

В Django есть три ключевых компонента, которые работают вместе: модели (models) для хранения данных, представления (views) для обработки запросов и маршруты (urls) для направления пользователей. Сегодня мы разберем, как эти компоненты взаимодействуют и создадим простое, но полноценное приложение блога.

Для начала давайте посмотрим, как обычно устроено приложение в Django и что делает каждый файл в этой структуре.

Таймлайн структуры приложения в Django

Типичная структура приложения выглядит так:

my_project/
    |-- my_app/
        |-- migrations/
        |-- templates/
        |-- static/
        |-- __init__.py
        |-- admin.py
        |-- apps.py
        |-- models.py
        |-- tests.py
        |-- urls.py
        |-- views.py

Давайте разберем роли каждого компонента в структуре.

  1. migrations/: папка, где Django хранит файлы миграций для синхронизации ваших моделей с базой данных.
  2. templates/: здесь живут HTML-шаблоны для рендера страниц.
  3. static/: место для CSS, JavaScript и других статических файлов.
  4. admin.py: конфигурация для Django Admin, где вы можете зарегистрировать свои модели.
  5. apps.py: файл конфигурации приложения (создается автоматически).
  6. models.py: здесь мы объявляем модели приложения.
  7. tests.py: файл для написания unit-тестов.
  8. urls.py: здесь описываются маршруты приложения.
  9. views.py: здесь живет логика обработки запросов и отдачи данных.

Построение структуры для приложения "Блог"

Мы уже создавали приложение "Блог", можете использовать его. Но на всякий случай кратко повторим основные шаги. Мы используем модели, представления (views) и маршруты (urls), чтобы объединить все в единое целое.

Шаг 1: Создание приложения

Сначала создадим новое приложение:

python manage.py startapp blog

Теперь добавьте приложение в INSTALLED_APPS файла settings.py:

INSTALLED_APPS = [
    ...
    'blog',
    ...
]

Шаг 2: Создаем модели для приложения

Заглянем в файл models.py нашего приложения и добавим следующие модели:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    bio = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.name


class Category(models.Model):
    name = models.CharField(max_length=50)
    description = models.TextField(blank=True, null=True)

    def __str__(self):
        return self.name


class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published_date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    categories = models.ManyToManyField(Category)

    def __str__(self):
        return self.title

Здесь мы описали три модели:

  • Author: для хранения информации об авторах статей.
  • Category: для классификации статей.
  • Article: для сохранения контента статей, с привязкой к автору (через ForeignKey) и категориям (через ManyToManyField).

Шаг 3: Создаем миграции

После создания моделей, не забудьте выполнить миграции, чтобы изменения применились к базе данных:

# Создаем файл миграции
python manage.py makemigrations

# Применяем миграции
python manage.py migrate

Шаг 4: Создание представлений (views)

Теперь мы перейдем к написанию представлений в файле views.py. Представления — это место, где мы обрабатываем запросы и возвращаем ответы.

Добавим несколько простых представлений:

from django.http import HttpResponse
from django.shortcuts import render
from .models import Article

def home(request):
    return HttpResponse("Добро пожаловать в блог!")

def article_list(request):
    articles = Article.objects.all()
    return render(request, 'blog/article_list.html', {'articles': articles})

def article_detail(request, pk):
    article = Article.objects.get(pk=pk)
    return render(request, 'blog/article_detail.html', {'article': article})
  • home: простое представление, возвращающее текстовый ответ.
  • article_list: вывод списка всех статей.
  • article_detail: вывод подробной информации об одной статье.

Шаг 5: настройка маршрутов (urls.py)

Теперь создадим маршруты для нашего приложения. Для этого создадим файл urls.py в папке приложения blog:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
    path('articles/', views.article_list, name='article_list'),
    path('articles/<int:pk>/', views.article_detail, name='article_detail'),
]
  • path('', views.home): связывает корень маршрута приложения с представлением home.
  • path('articles/'): связывает путь /articles/ с представлением article_list.
  • path('articles/<int:pk>/'): связывает путь /articles/{id} с представлением article_detail.

Не забудьте подключить маршруты приложения в основном urls.py проекта:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
]

Маршрут blog/ будет обрабатывать все запросы, начинающиеся с /blog.

Шаг 6: Шаблоны (templates)

Создадим папку templates/blog в директории приложения и добавим два файла:

article_list.html:

<h1>Список статей</h1>
<ul>
    {% for article in articles %}
        <li><a href="/blog/articles/{{ article.id }}/">{{ article.title }}</a></li>
    {% endfor %}
</ul>

article_detail.html:

<h1>{{ article.title }}</h1>
<p><strong>Автор:</strong> {{ article.author.name }}</p>
<p><strong>Контент:</strong> {{ article.content }}</p>
<p><strong>Опубликовано:</strong> {{ article.published_date }}</p>

Эти шаблоны рендерят HTML-страницы для списка статей и детальной информации о статье.

Шаг 7: Оживляем приложение

Теперь наше приложение "Блог" готово к запуску. Запустите сервер командой:

python manage.py runserver

Откройте браузер на http://127.0.0.1:8000/blog/articles/ — вы должны увидеть список статей из базы данных. Кликните на любую статью, чтобы посмотреть её подробности.

Практическое задание

  1. Добавьте новое представление для отображения списка авторов.
  2. Создайте маршрут для нового представления.
  3. Напишите соответствующий шаблон для отображения авторов.
  4. Подумайте, как можно улучшить структуру кода приложения (например, добавив разделение на модули).

Поздравляю, вы только что освоили одну из ключевых концепций Django — организацию приложения! Теперь ваш код становится более структурированным и готовым к расширению.

1
Задача
Модуль 3: Django, 6 уровень, 6 лекция
Недоступна
Создание представления и маршрута
Создание представления и маршрута
1
Задача
Модуль 3: Django, 6 уровень, 6 лекция
Недоступна
Создание и интеграция шаблона
Создание и интеграция шаблона
Комментарии (3)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Евгений Уровень 69
16 августа 2025
По второй задаче пришлось перекинуть папку templates внутрь приложения blog, чтобы валидатор в PyCharm пропустил решение.
blog_project/blog/templates/blog/article_list.html
Ivan Уровень 59
13 июля 2025
У меня стойкое дежавю. Кажется, я одну и ту же статью уже по пятому разу читаю без какой-либо новой информации.
Александр Уровень 68
3 августа 2025
Повторение - мать учения!😀