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

Практическое задание по CRUD-операциям

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

Добро пожаловать в финальную лекцию уровня про CRUD-операции! Сегодня мы постараемся обобщить полученные знания, чтобы создать полноценное CRUD-приложение. Это будет практическое задание, и в нём мы реализуем

создание, чтение, обновление и удаление объектов через Django ORM.

Задача: приложение "Менеджер задач"

Мы создадим простое приложение для управления задачами. Функционал приложения будет включать:

  • Добавление новых задач.
  • Просмотр списка всех задач.
  • Редактирование уже существующих задач.
  • Удаление задач.

1. Создание проекта и приложения

Шаг 1: Создаём проект Django

Для начала необходимо создать новый проект Django. Для этого выполните следующую команду:

django-admin startproject task_manager

Перейдите в созданную папку проекта:

cd task_manager

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

Внутри проекта создадим приложение, которое будет управлять задачами:

python manage.py startapp tasks

Зарегистрируйте приложение в настройках проекта. В файле settings.py добавьте tasks в список INSTALLED_APPS:

INSTALLED_APPS = [
    ...,
    'tasks',
]

2. Создание модели задачи

Шаг 1: описание модели

Теперь перейдём к созданию модели Task. Откройте файл tasks/models.py и добавьте следующий код:

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=255)  # Краткое описание задачи
    description = models.TextField(blank=True, null=True)  # Подробности задачи
    completed = models.BooleanField(default=False)  # Статус выполнения задачи
    created_at = models.DateTimeField(auto_now_add=True)  # Дата создания
    updated_at = models.DateTimeField(auto_now=True)  # Дата последнего обновления

    def __str__(self):
        return self.title

Шаг 2: миграции

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

python manage.py makemigrations
python manage.py migrate

3. Реализация CRUD-операций

Шаг 1: создание представлений

Теперь создадим представления (views) для реализации CRUD-операций. Откройте файл tasks/views.py:

from django.shortcuts import render, get_object_or_404, redirect
from .models import Task

# Просмотр всех задач
def task_list(request):
    tasks = Task.objects.all()  # Получаем все задачи
    return render(request, 'tasks/task_list.html', {'tasks': tasks})

# Добавление новой задачи
def task_create(request):
    if request.method == 'POST':
        title = request.POST.get('title')
        description = request.POST.get('description')
        Task.objects.create(title=title, description=description)
        return redirect('task_list')
    return render(request, 'tasks/task_form.html')

# Редактирование задачи
def task_update(request, pk):
    task = get_object_or_404(Task, pk=pk)
    if request.method == 'POST':
        task.title = request.POST.get('title')
        task.description = request.POST.get('description')
        task.completed = request.POST.get('completed') == 'on'
        task.save()
        return redirect('task_list')
    return render(request, 'tasks/task_form.html', {'task': task})

# Удаление задачи
def task_delete(request, pk):
    task = get_object_or_404(Task, pk=pk)
    if request.method == 'POST':
        task.delete()
        return redirect('task_list')
    return render(request, 'tasks/task_confirm_delete.html', {'task': task})

Шаг 2: настройка маршрутов

Добавьте маршруты для этих представлений в файле tasks/urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.task_list, name='task_list'),
    path('create/', views.task_create, name='task_create'),
    path('update/<int:pk>/', views.task_update, name='task_update'),
    path('delete/<int:pk>/', views.task_delete, name='task_delete'),
]

Зарегистрируйте маршруты приложения в основном маршрутизаторе task_manager/urls.py:

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

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

4. Шаблоны для CRUD-приложения

Создайте папку templates/tasks/ и добавьте следующие шаблоны:

Шаблон списка задач task_list.html

<!DOCTYPE html>
<html>
<head>
    <title>Список задач</title>
</head>
<body>
    <h1>Список задач</h1>
    <a href="{% url 'task_create' %}">Добавить задачу</a>
    <ul>
        {% for task in tasks %}
        <li>
            {{ task.title }} - {{ task.created_at }}
            <a href="{% url 'task_update' task.pk %}">Редактировать</a>
            <a href="{% url 'task_delete' task.pk %}">Удалить</a>
        </li>
        {% endfor %}
    </ul>
</body>
</html>

Шаблон формы task_form.html

<!DOCTYPE html>
<html>
<head>
    <title>Форма задачи</title>
</head>
<body>
    <h1>{% if task %}Редактировать{% else %}Добавить{% endif %} задачу</h1>
    <form method="post">
        {% csrf_token %}
        <label>Название:</label>
        <input type="text" name="title" value="{{ task.title|default:'' }}"><br>
        <label>Описание:</label>
        <textarea name="description">{{ task.description|default:'' }}</textarea<<br>
        {% if task %}
        <label>Выполнено:</label>
        <input type="checkbox" name="completed" {% if task.completed %}checked{% endif %}><br>
        {% endif %}
        <button type="submit">Сохранить</button>
    </form>
</body>
</html>

Шаблон подтверждения удаления task_confirm_delete.html

<!DOCTYPE html>
<html>
<head>
    <title>Удалить задачу</title>
</head>
<body>
    <h1>Удалить задачу "{{ task.title }}"?</h1>
    <form method="post">
        {% csrf_token %}
        <button type="submit">Удалить</button>
    </form>
    <a href="{% url 'task_list' %}">Отмена</a>
</body>
</html>

5. Тестирование приложения

Запустите сервер разработки:

python manage.py runserver

Перейдите на http://127.0.0.1:8000/. Вы должны увидеть список задач. Попробуйте выполнять следующие действия:

  • Добавить новую задачу.
  • Редактировать существующую задачу.
  • Удалить задачу.

Теперь у вас есть полностью функциональное CRUD-приложение на Django. Вы научились использовать основные функции Django ORM в реальном проекте и, более того, сделали это практическим примером, который можно использовать как основу для ваших будущих проектов.

1
Задача
Модуль 3: Django, 8 уровень, 9 лекция
Недоступна
Реализуйте представление для создания и просмотра списка фильмов
Реализуйте представление для создания и просмотра списка фильмов
1
Задача
Модуль 3: Django, 8 уровень, 9 лекция
Недоступна
Полная реализация CRUD для модели Movie
Полная реализация CRUD для модели Movie
3
Опрос
Продвинута работа с QuerySet, 8 уровень, 9 лекция
Недоступен
Продвинута работа с QuerySet
Продвинута работа с QuerySet
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Евгений Уровень 70
26 августа 2025
В коде из лекции опечатка в шаблоне формы task_form.html, а именно в закрывающем теге </textarea<.