JavaRush /Курсы /Модуль 3: Django /Практическое задание по созданию полноценного приложения

Практическое задание по созданию полноценного приложения

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

Мы научились создавать новое приложение с помощью команды startapp, регистрировать приложения в INSTALLED_APPS. Мы также освоили маршрутизацию на уровне приложений, создали свои urls.py и поняли, как связать их с главным маршрутизатором проекта. Помимо этого, мы рассмотрели организацию кода в приложении, написали первые модели, выполнили миграции и прикоснулись к магии Django ORM. С каждым шагом мы двигались в сторону создания реального приложения.

Теперь пора собрать всё это воедино и создать полноценное приложение. Готовы? Погнали строить наш "Блог"!

Пошаговое руководство по созданию приложения "Блог"

Шаг 1: Подготовка проекта

Если у вас ещё нет Django-проекта, создаём его командой:

django-admin startproject mysite
cd mysite

Теперь создадим новое приложение "blog":

python manage.py startapp blog

Добавляем наше новое приложение в список INSTALLED_APPS в файле mysite/settings.py. В конце списка добавьте строку:

INSTALLED_APPS = [
    ...
    'blog',
]

Шаг 2: Определение модели

Модель "Post" (Статья)

Переходим в файл blog/models.py и описываем модель для публикации:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)  # Заголовок статьи
    content = models.TextField()  # Текст статьи
    author = models.CharField(max_length=100)  # Автор статьи
    created_at = models.DateTimeField(auto_now_add=True)  # Время создания
    updated_at = models.DateTimeField(auto_now=True)  # Время последнего обновления

    def __str__(self):
        return self.title  # Для отображения названия статьи в админке

Применение миграций

Создаём миграцию и применяем её:

python manage.py makemigrations
python manage.py migrate

Теперь в базе данных есть структура для хранения наших статей (постов). Это было легче, чем вы ожидали, верно? 😉

Шаг 3: Создание админки

Админка Django — отличное место для управления данными, особенно на ранних этапах разработки. Зарегистрируем модель "Post" в админ-зоне.

В файле blog/admin.py добавляем:

from django.contrib import admin
from .models import Post

admin.site.register(Post)  # Регистрируем модель для админки

Запускаем сервер и заходим в админку:

python manage.py runserver

Переходим на http://127.0.0.1:8000/admin/ и проверяем, что модель "Post" успешно отображается.

Шаг 4: Маршруты и представления

Настройка маршрутов (urls)

Для управления маршрутами создаём файл blog/urls.py и добавляем в него:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),  # Маршрут для списка постов
    path('<int:id>>/', views.post_detail, name='post_detail'),  # Маршрут для деталей поста
]

Подключаем маршруты приложения "blog" к основному маршрутизатору проекта, добавив следующую строку в mysite/urls.py:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),  # Подключаем маршруты из приложения "blog"
]

Написание представлений (views)

Теперь напишем функции для отображения списка постов и деталей поста. В файле blog/views.py добавляем:

from django.shortcuts import render, get_object_or_404
from .models import Post

def post_list(request):
    posts = Post.objects.all().order_by('-created_at')  # Все посты, отсортированные по дате создания
    return render(request, 'blog/post_list.html', {'posts': posts})

def post_detail(request, id):
    post = get_object_or_404(Post, id=id)  # Получаем пост по ID или выдаём 404
    return render(request, 'blog/post_detail.html', {'post': post})

Шаг 5: Шаблоны

Создаём папку templates/blog внутри папки приложения blog. Это место, где будут храниться наши HTML-шаблоны.

Шаблон для списка постов

Создайте файл templates/blog/post_list.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Список публикаций</title>
</head>
<body>
    <h1>Список публикаций</h1>
    <ul>
    {% for post in posts %}
        <li>
            <a href="{{ post.id }}/">{{ post.title }}</a>
            <p>Автор: {{ post.author }}</p>
            <p>Дата: {{ post.created_at }}</p>
        </liv
    {% endfor %}
    </ul>
</body>
</html>

Шаблон для деталей поста

Создайте файл templates/blog/post_detail.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ post.title }}</title>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p><strong>Автор:</strong> {{ post.author }}</p>
    <p><strong>Дата:</strong> {{ post.created_at }}</p>
    <p>{{ post.content }}</p>
    <a href="/">Назад к списку</a>
</body>
</html>

Шаг 6: Проверка работы приложения

Запускаем сервер, если он ещё не работает:

python manage.py runserver

Переходим на http://127.0.0.1:8000/ и проверяем:

  • Главная страница показывает список публикаций.
  • Клик по названию публикации открывает её подробности.

Если всё работает как надо, вы только что завершили создание полноценного приложения "Блог"! 🎉

Советы и типичные ошибки

  1. Ошибка миграции моделей. Если вы забыли выполнить миграции после изменения модели, Django выдаст ошибку. Перед запуском сервера всегда убедитесь, что вы выполнили команды makemigrations и migrate.

  2. Отсутствие шаблонов. Если Django не может найти шаблон, убедитесь, что вы создали папку templates/ внутри приложения и указали правильный путь при вызове render().

  3. Ошибка маршрутизации. Если страница не находится, проверьте ваши маршруты в urls.py. Возможно, вы забыли подключить маршруты приложения к главному маршрутизатору.

  4. DB-related ошибки. Убедитесь, что модель зарегистрирована в models.py до применения миграций.

На практике вы только что создали простое, но функциональное приложение. Это базовый уровень, но даже это уже может быть полезно в работе. В реальной жизни такое приложение часто используется как основа для ведения блогов, корпоративных сайтов и даже небольших CMS. Теперь у вас есть все инструменты, чтобы двигаться дальше! 🚀

1
Задача
Модуль 3: Django, 6 уровень, 9 лекция
Недоступна
Реализация маршрутов и представлений
Реализация маршрутов и представлений
1
Задача
Модуль 3: Django, 6 уровень, 9 лекция
Недоступна
Создание шаблонов для отображения данных
Создание шаблонов для отображения данных
3
Опрос
Работа с моделями в приложении, 6 уровень, 9 лекция
Недоступен
Работа с моделями в приложении
Работа с моделями в приложении
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Евгений Уровень 70
18 августа 2025
Пошаговое руководство по созданию приложения "Блог" 1. Маршруты: blog/urls.py Лишняя > в маршруте '<int:id>>/' 2. Шаблоны: Шаблон для списка постов: templates/blog/post_list.html Некорректный закрывающий тег </liv вместо </li>
Евгений Уровень 70
18 августа 2025
Во 2ой задаче (Создание шаблонов для отображения данных) пришлось удалить базу данных, чтобы валидатор в PyCharm засчитал решение.