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