Добро пожаловать в финальную лекцию уровня про 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 в реальном проекте и, более того, сделали это практическим примером, который можно использовать как основу для ваших будущих проектов.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ