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 у реальному проєкті і, більше того, зробили це практичним прикладом, який можна використовувати як основу для ваших майбутніх проєктів.

3
Опитування
Просунута робота з QuerySet, рівень 8, лекція 9
Недоступний
Просунута робота з QuerySet
Просунута робота з QuerySet
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ