Научете как да създадете приложение за диспечер на задачи, като използвате принципите на CRUD и базирани на клас изгледи в Django.

Една от ключовите характеристики на Django е неговата вградена поддръжка за създаване на проекти върху CRUD (Създаване, Четене, Актуализиране, Изтриване) операции. Докато базираните на клас изгледи на Django осигуряват бърз, лесен и гъвкав начин за изграждане на уеб приложения, много разработчици все още използват функционално базирани изгледи.

Изгледите, базирани на класове, предлагат няколко предимства пред базираните на функции изгледи, включително наследяване, структуриране на кода, повторна употреба на кода и други. Въпреки че внедряването на изгледи, базирани на клас, може да изглежда малко сложно, това ръководство ще ви помогне да разберете концепцията, като изградите приложение за диспечер на задачи и предоставяне на инструкции стъпка по стъпка.

Какво представляват базираните на клас изгледи в Django?

В Django гледките са Функции на Python които приемат уеб заявка и връщат уеб отговор. Изгледи, базирани на класове (CBV) са алтернативен начин за дефиниране на изгледи в Django, като се използват класове на Python вместо функции.

instagram viewer

CBV имат няколко предимства, като по-добра организация на кода, по-лесна повторна употреба на код и възможност за използване на наследяване за създаване на варианти на съществуващи изгледи. CBV също предоставят вградени методи като получи() и пост() методи, които можете да презапишете за персонализирани поведения.

Кодът, използван в тази статия, е достъпен в това GitHub хранилище.

Изгледи, базирани на класове, налични в Django

Django предоставя някои вградени CBV за популярни случаи на употреба, като показване на списъци с обекти или създаване на нови. Някои от тези вградени CBV са:

  1. ListView: Този изглед изобразява списък с обекти, извлечени от модел. Например, страница, която изброява всички налични публикации в блог, ще използва a ListView.
  2. DetailView: Този изглед изобразява подробен изглед на единичен обект, извлечен от модел. Можете да използвате a DetailView за показване на подробности за конкретни публикации в блог приложение.
  3. CreateView: Този изглед изобразява формуляр за създаване на нов обект и обработва изпращането на формуляра. Например в приложение за диспечер на задачи ще използвате този изглед за създаване на нови задачи.
  4. DeleteView: Този изглед изобразява страница за потвърждение за изтриване на обект и обработва изтриването на страницата.
  5. UpdateView: Този изглед изобразява формуляр за актуализиране на съществуващ обект и обработва подаването на формуляра.

Django предоставя и други изгледи, включително TemplateView, RedirectView, и FormView. Можете да се обърнете към Документация на Django за подробна информация относно базирани на клас изгледи.

Създайте приложение за диспечер на задачи с изгледи, базирани на клас Django

Създаването на приложение, като например приложение за мениджър на задачи, ще ви позволи да разберете как да прилагате CRUD операции с CBV. Диспечерът на задачи има функции, които позволяват на потребителите да създават, актуализират, изтриват и четат задачи. Тези функции са в съответствие с операциите CRUD. Следващите стъпки ще ви помогнат да създадете приложение за диспечер на задачи с Django CBV.

Настройте Django проект

За да създадете приложение за мениджър на задачи с Django, трябва да започнете, като следвате тези стъпки:

  1. Инсталирайте Django във вашия Python виртуална среда с тази команда:
    pip инсталирайте django
  2. Създайте Django проект. Следващата команда ще създаде проект, наречен project_core.
    django-admin startproject project_core.
  3. Създайте приложение, наречено Диспечер на задачите.
    python manage.py startapp task_manager
  4. Във вашия settings.py добавете името на приложението си към INSTALLED_APPS списък.
    INSTALLED_APPS = [
    'Диспечер на задачите',
    ]
  5. Отвори urls.py файл в директорията на вашия проект и конфигурирайте URL адресите за вашия Диспечер на задачите приложение:
    от django.urls импортиране път, включват

    urlpatterns = [
    път ('', включете ('task_manager.urls')),
    ]

Създайте модел за вашето приложение Task Manager

В директорията на вашето приложение (или Диспечер на задачите папка), отворете вашата models.py файл и създайте модел за вашето приложение за диспечер на задачи. Ето примерен модел, който можете да използвате:

от django.db импортиране модели

класЗадача(модели. Модел):
заглавие = модели. CharField (max_length=200)
описание = модели. Текстово поле()
завършени = модели. BooleanField (по подразбиране=Невярно)
created_at = модели. DateTimeField (auto_now_add=Вярно)

Мигрирайте вашия модел с тази команда:

python manage.py makemigrations && python manage.py мигрират

Създайте Django формуляр за вашето приложение

Трябва да имате формуляр за обработка Създавайте и Актуализация операции. В директорията на вашето приложение създайте файл, наречен forms.py. Ето един пример:

от Джанго импортиране форми
от .модели импортиране Задача

класTaskForm(форми. ModelForm):
класМета:
модел = Задача
полета = ['заглавие', "описание", "завършен"]

джаджи = {
'заглавие': форми. TextInput (attrs={"клас": "контрол на формата",}),
"описание": форми. Текстово поле (attrs={"клас": "контрол на формата",}),
"завършен": форми. CheckboxInput (attrs={"клас": 'форма-проверка-въвеждане'}),
}

Кодът по-горе има клас, наречен TaskForm който дефинира полетата и уиджетите на формуляра. Той също така определя модела, който да използвате.

Създайте Django изгледи за всяка CRUD операция

Едно основно CRUD приложение с CBV изисква поне четири изгледа, за да се справи ефективно с всички операции. Следващите няколко стъпки ще ви покажат как да ги създадете.

Импортирайте необходимите модули и пакети

Отвори си views.py файл и направете следните импортирания:

от django.views.generic импортиране ListView, DetailView, CreateView, UpdateView, DeleteView
от django.urls импортиране reverse_lazy
от .модели импортиране Задача
от .форми импортиране TaskForm

Кодът по-горе импортира пет CBV. Освен това внася reverse_lazy за пренасочване на потребителя към определен URL адрес след изпращане на формуляр. И накрая, той импортира Задача модел, и TaskForm създадени по-рано.

Създайте изглед за изброяване на моделни обекти

Приложението за мениджър на задачи трябва да има страница, в която са изброени всички задачи, създадени от потребителя. За да създадете изглед за това, трябва да използвате ListView. Ето един пример:

класTaskListView(ListView):
модел = Задача
име_на_шаблон = 'task_manager/task_list.html'
контекст_име_на_обект = "задачи"

Изгледът по-горе дефинира три атрибута, които са:

  1. модел: Този атрибут определя кой модел да се използва за този конкретен изглед.
  2. име_на_шаблон: Този атрибут казва на Django кой шаблон да изобрази на браузъра.
  3. име_на_контекст_обект: Този атрибут дефинира името, което позволява на шаблона достъп до списъка с обекти в модела.

Повечето CBV ще съдържат тези три атрибута.

Създайте изглед за обработка на подробности за задачата

Всяка задача, създадена от потребител, трябва да има страница, показваща нейните подробности. Идеалният CBV за справяне с това е DetailVew. Ето един прост пример:

класTaskDetailView(DetailView):
модел = Задача
име_на_шаблон = 'task_manager/task_detail.html'

Създайте изглед за създаване на задача

Създайте изглед, за да управлявате създаването или добавянето на нови задачи. Това е Създавайте част от CRUD операциите и правилният изглед за това е CreateView. Ето как да го използвате:

класTaskCreateView(CreateView):
модел = Задача
form_class = Формуляр за задачи
име_на_шаблон = 'task_manager/task_form.html'
success_url = reverse_lazy('списък със задачи')

Кодът по-горе въвежда два нови атрибута: клас_форма и успех_url.

The клас_форма атрибутът казва на изгледа кой клас на формуляр да рендира и използва за своите операции.

The успех_url указва как да пренасочи потребителя след изпращане на формуляра. Той използва reverse_lazy функция, която приема името на URL път.

Създайте изглед за задачи за редактиране

За да позволите на вашите потребители да редактират или актуализират своите задачи, трябва да създадете изглед, който изглежда така:

класTaskUpdateView(UpdateView):
модел = Задача
form_class = Формуляр за задачи
име_на_шаблон = 'task_manager/task_form.html'
success_url = reverse_lazy('списък със задачи')

Горният изглед е подобен на TaskCreateView създадени по-рано. Единствената разлика е използването на UpdateView.

Създайте изглед за обработка на операциите за изтриване

За да позволите на вашите потребители да изтриват задачи, когато пожелаят, трябва да използвате DeleteView CBV. Ето един пример:

класTaskDeleteView(DeleteView):
модел = Задача
име_на_шаблон = 'task_manager/task_confirm_delete.html'
success_url = reverse_lazy('списък със задачи')

Конфигурирайте URL адресите на вашето приложение

В директорията на вашето приложение създайте a urls.py файл и конфигурирайте вашите URL модели по този начин:

от django.urls импортиране път
от .изгледи импортиране TaskListView, TaskDetailView, TaskCreateView, TaskUpdateView, TaskDeleteView

urlpatterns =
път ('', TaskListView.as_view(), име='списък със задачи'),
път ("създай/", TaskCreateView.as_view(), име='task_create'),
път ('задачи//', TaskDetailView.as_view(), име='task_detail'),
път ('задачи//update/', TaskUpdateView.as_view(), име='task_update'),
път ('задачи//delete/', TaskDeleteView.as_view(), име='task_delete'),
]

URL моделите по-горе са подобни на URL адреси, създадени с изгледи, базирани на функции. Разликата е в as_view() функция, добавена в края на всяко име на изглед.

Можеш използвайте Django slugs за създаване на URL адреси вместо първичния ключ, използван по-горе.

Създавайте шаблони за вашите изгледи

Разрешаването на вашите потребители да извършват действията, дефинирани в изгледите по-горе, предполага, че им предоставяте интерфейс, с който да взаимодействат. От изгледите, създадени по-рано, приложението за управление на задачите трябва да има четири потребителски интерфейса.

В директорията на вашето приложение създайте четири HTML шаблона. Вие също трябва да създавате база.html файл. Можеш стилизирайте вашите Django шаблони с Bootstrap за да спестите време.

Шаблон за списък със задачи

Този шаблон трябва да включва код, който изброява всички задачи в модела. Скелетен пример за кода е следният:

{% разширява 'base.html' %}

{% блокиране на съдържанието %}
<център>
<h1>Вашите задачиh1>
<аhref=„{% url 'task_create' %}“>Добавяне на задачаа>
{% за задача в задачи %}
<див>
<див>
<h5>{{ task.title }}h5>
<стр>{{ task.description|truncatechars: 50 }}стр>
<стр>
<силен>Завършено:силен>
{% if task.completed %}Да{% else %}Не{% endif %}
стр>
<аhref="{% url 'task_detail' task.pk %}">
Прочетете още
а>
<аhref="{% url 'task_delete' task.pk %}">
Изтриване на задача
а>
див>
див>
{% празен %}
<h3>Все още няма задачи.h3>
<аhref=„{% url 'task_create' %}“>Добавяне на задачаа>
{% endfor %}
център>
{% endblock %}

С някои класове на Bootstrap можете да направите страницата си да изглежда така:

Шаблон за подробности за задачата

Тази страница трябва да показва пълните подробности за всяка създадена задача. Ето примерен шаблон, който можете да използвате:

{% разширява 'base.html' %}

{% блокиране на съдържанието %}
<h1>{{ task.title }}h1>
<стр>{{ описание на задачата }}стр>
<стр>Завършено: {% if task.completed %}Да{% else %}Не{% endif %}стр>
<аhref="{% url 'task_update' task.pk %}">Редактиране на задачаа>
<аhref="{% url 'task_delete' task.pk %}">Изтриване на задачаа>
{% endblock %}

В зависимост от подхода ви към стила, вашата страница трябва да изглежда така:

Шаблон на формуляр за задача

Този шаблон трябва да съдържа формуляр, който позволява на потребителя да създаде или актуализира задача.

{% разширява 'base.html' %}

{% блокиране на съдържанието %}
<h1>Създаване на задачаh1>
<формаметод="пост">
{% csrf_token %}
{{ form.as_p }}
<бутонТип="Изпращане">Запазванебутон>
форма>
{% endblock %}

Шаблонът ще изглежда така:

Изтриване на шаблон на задача

Този шаблон трябва да бъде страница за потвърждение, за да се предотврати случайно изтриване на задачи.

{% разширява 'base.html' %}

{% блокиране на съдържанието %}
<h1>Потвърдете Изтриванеh1>
<стр>Сигурни ли сте, че искате да изтриете „{{ object.title }}“?стр>
<формаметод="пост">
{% csrf_token %}
<бутонТип="Изпращане">Изтрийбутон>
<аhref="{% url 'task_list' %}">Отказа>
форма>
{% endblock %}

С малко Bootstrap страницата ви трябва да изглежда така:

Използвайте изгледи, базирани на клас, за да увеличите производителността си

Базираните на класове изгледи са чудесен начин да напишете чист, организиран код за кратко време, като по този начин увеличите производителността си. Трябва да ги използвате във вашите проекти колкото е възможно повече. Освен това можете допълнително да интегрирате функции като функционалност за търсене, известия и т.н., за да направите вашето приложение за диспечер на задачи напълно функционално приложение.