Siit saate teada, kuidas luua tegumihalduri rakendust, kasutades Django CRUD ja klassipõhiste vaadete põhimõtteid.

Üks Django põhifunktsioone on selle sisseehitatud tugi projektide loomiseks lisaks CRUD-operatsioonidele (Create, Read, Update, Delete). Kuigi Django klassipõhised vaated pakuvad kiiret, lihtsat ja paindlikku viisi veebirakenduste loomiseks, kasutavad paljud arendajad endiselt funktsioonipõhiseid vaateid.

Klassipõhised vaated pakuvad funktsioonipõhiste vaadetega võrreldes mitmeid eeliseid, sealhulgas pärimine, koodi struktureerimine, koodi korduvkasutatavus ja palju muud. Kuigi klassipõhiste vaadete rakendamine võib tunduda pisut keeruline, aitab see juhend teil kontseptsioonist aru saada, luues tegumihalduri rakenduse ja pakkudes samm-sammult juhiseid.

Mis on Django klassipõhised vaated?

Djangos on vaated Pythoni funktsioonid mis võtavad vastu veebipäringu ja tagastavad veebivastuse. Klassipõhised vaated (CBV-d) on alternatiivne viis vaadete määratlemiseks Djangos, kasutades funktsioonide asemel Pythoni klasse.

CBV-del on mitmeid eeliseid, nagu parem koodikorraldus, lihtsam koodi taaskasutamine ja võimalus kasutada pärimist olemasolevate vaadete variatsioonide loomiseks. CBV-d pakuvad ka sisseehitatud meetodeid, nagu saada () ja postitus() meetodid, mida saate kohandatud käitumise jaoks üle kirjutada.

Selles artiklis kasutatud kood on saadaval selles GitHubi hoidla.

Djangos on saadaval klassipõhised vaated

Django pakub mõningaid sisseehitatud CBV-sid populaarseteks kasutusjuhtudeks, näiteks objektide loendite kuvamiseks või uute loomiseks. Mõned neist sisseehitatud CBV-dest on järgmised:

  1. Loendivaade: see vaade kuvab mudelist hangitud objektide loendi. Näiteks leht, mis loetleb kõik ajaveebis saadaolevad postitused, kasutab a Loendivaade.
  2. Detailne vaade: see vaade annab üksikasjaliku vaate mudelist hangitud üksikust objektist. Võite kasutada a Detailne vaade konkreetsete postituste üksikasjade kuvamiseks ajaveebirakenduses.
  3. Loo vaade: see vaade renderdab vormi uue objekti loomiseks ja käsitleb vormi esitamist. Näiteks tegumihalduri rakenduses kasutate seda vaadet uute ülesannete loomiseks.
  4. Kustuta vaade: see vaade renderdab objekti kustutamise kinnituslehe ja tegeleb lehe kustutamisega.
  5. UpdateView: see vaade renderdab vormi olemasoleva objekti värskendamiseks ja tegeleb vormi esitamisega.

Django pakub ka muid vaateid, sealhulgas Mallivaade, RedirectView, ja FormView. Võite viidata Django dokumentatsioon klassipõhiste vaadete kohta üksikasjaliku teabe saamiseks.

Ehitage Django klassipõhiste vaadetega tegumihalduri rakendus

Rakenduse, näiteks tegumihalduri rakenduse loomine võimaldab teil mõista, kuidas CBV-dega CRUD-operatsioone rakendada. Tegumihalduril on funktsioone, mis võimaldavad kasutajatel ülesandeid luua, värskendada, kustutada ja lugeda. Need funktsioonid on kooskõlas CRUD-i toimingutega. Järgmised sammud aitavad teil luua Django CBV-dega tegumihalduri rakenduse.

Seadistage Django projekt

Tegumihalduri rakenduse loomiseks Djangoga peaksite alustama järgmiste sammudega.

  1. Installige Django oma Pythoni virtuaalne keskkond selle käsuga:
    pip install django
  2. Looge Django projekt. Järgmine käsk loob projekti nimega projekti_tuum.
    django-admin startproject projekti_tuum .
  3. Looge rakendus nimega ülesande_haldur.
    python manage.py startapp task_manager
  4. Sinu settings.py lisage oma rakenduse nimi INSTALLED_APPS nimekirja.
    INSTALLED_APPS = [
    'task_manager',
    ]
  5. Ava urls.py faili oma projekti kataloogi ja seadistage oma URL-id ülesande_haldur rakendus:
    alates django.urls importida tee, kaasa

    urlmustrid = [
    tee ('', sisaldab('task_manager.urls')),
    ]

Looge oma tegumihalduri rakenduse jaoks mudel

Teie rakenduste kataloogis (või ülesande_haldur kaust), avage oma mudelid.py faili ja looge oma tegumihalduri rakenduse jaoks mudel. Siin on näidismudel, mida saate kasutada:

alates django.db importida mudelid

klassÜlesanne(mudelid. mudel):
pealkiri = mudelid. CharField (max_length=200)
kirjeldus = mudelid. Tekstiväli()
lõpetatud = mudelid. BooleanField (vaikimisi =Vale)
loodud_at = mudelid. DateTimeField (auto_now_add=Tõsi)

Migreerige oma mudel selle käsuga:

python manage.py makemigrations && python manage.py migre

Looge oma rakenduse jaoks Django vorm

Käsitsemiseks peaks teil olema vorm Loo ja Värskenda operatsioonid. Looge oma rakenduste kataloogis fail nimega forms.py. Siin on näide:

alates django importida vormid
alates .mudelid importida Ülesanne

klassÜlesandevorm(vormid. ModelForm):
klassMeta:
mudel = Ülesanne
väljad = ["tiitel", "kirjeldus", 'lõpetatud']

vidinad = {
"tiitel": vormid. Tekstisisestus (attrs={'klass': "vormikontroll",}),
"kirjeldus": vormid. Tekstiala (attrs={'klass': "vormikontroll",}),
'lõpetatud': vormid. Märkeruudu sisend (attrs={'klass': 'vorm-check-input'}),
}

Ülaltoodud koodil on klass nimega Ülesandevorm mis määrab vormi väljad ja vidinad. See määrab ka kasutatava mudeli.

Looge iga CRUD-i operatsiooni jaoks Django vaated

CBV-dega põhirakendus CRUD nõuab kõigi toimingute tõhusaks haldamiseks vähemalt nelja vaadet. Järgmised paar sammu näitavad teile, kuidas neid luua.

Importige vajalikud moodulid ja paketid

Ava oma views.py faili ja tehke järgmised imporditoimingud:

alates django.views.generic importida Loendivaade, DetailView, CreateView, UpdateView, DeleteView
alates django.urls importida vastupidine_laisk
alates .mudelid importida Ülesanne
alates .vormid importida Ülesandevorm

Ülaltoodud kood impordib viis CBV-d. Samuti impordib vastupidine_laisk et suunata kasutaja pärast vormi esitamist määratud URL-ile. Lõpuks impordib see Ülesanne mudel ja Ülesandevorm varem loodud.

Looge mudeliobjektide loetlemiseks vaade

Tegumihalduri rakendusel peaks olema leht, kus on loetletud kõik kasutaja loodud ülesanded. Selle jaoks vaate loomiseks peaksite kasutama Loendivaade. Siin on näide:

klassTaskListView(Loendivaade):
mudel = Ülesanne
malli_nimi = 'task_manager/task_list.html'
konteksti_objekti_nimi = 'ülesanded'

Ülaltoodud vaade määratleb kolm atribuuti, mis on:

  1. mudel: see atribuut määrab, millist mudelit selle konkreetse vaate jaoks kasutada.
  2. malli_nimi: see atribuut ütleb Djangole, milline mall brauserisse renderdada.
  3. konteksti_objekti_nimi: see atribuut määrab nime, mis võimaldab mallil juurdepääsu mudeli objektide loendile.

Enamik CBV-sid sisaldab neid kolme atribuuti.

Ülesande üksikasjade käsitlemiseks looge vaade

Igal kasutaja loodud ülesandel peaks olema leht, mis näitab selle üksikasju. Ideaalne CBV selle lahendamiseks on DetailVew. Siin on lihtne näide:

klassTaskDetailView(Detailne vaade):
mudel = Ülesanne
malli_nimi = 'task_manager/task_detail.html'

Looge vaade ülesannete loomiseks

Looge vaade uute ülesannete loomiseks või lisamiseks. See on Loo osa CRUD-i operatsioonidest ja selle jaoks on õige vaade Loo vaade. Kasutage seda järgmiselt.

klassTaskCreateView(Loo vaade):
mudel = Ülesanne
form_class = Ülesandevorm
malli_nimi = 'task_manager/task_form.html'
edu_url = vastupidine_laisk('ülesannete nimekiri')

Ülaltoodud kood tutvustab kahte uut atribuuti: vormi_klass ja edu_url.

The vormi_klass atribuut annab vaatele teada, millist vormiklassi renderdada ja oma toimingute jaoks kasutada.

The edu_url määrab, kuidas kasutaja pärast vormi esitamist ümber suunata. See kasutab vastupidine_laisk funktsioon, mis võtab URL-i tee nime.

Looge vaade ülesannete redigeerimiseks

Selleks, et kasutajad saaksid oma ülesandeid muuta või värskendada, peaksite looma vaate, mis näeb välja järgmine:

klassTaskUpdateView(UpdateView):
mudel = Ülesanne
form_class = Ülesandevorm
malli_nimi = 'task_manager/task_form.html'
edu_url = vastupidine_laisk('ülesannete nimekiri')

Ülaltoodud vaade on sarnane TaskCreateView varem loodud. Ainus erinevus on selle kasutamine UpdateView.

Kustutamistoimingute haldamiseks looge vaade

Selleks, et kasutajad saaksid ülesandeid igal ajal kustutada, peaksite kasutama Kustuta vaade CBV. Siin on näide:

klassTaskDeleteView(Kustuta vaade):
mudel = Ülesanne
malli_nimi = 'task_manager/task_confirm_delete.html'
edu_url = vastupidine_laisk('ülesannete nimekiri')

Seadistage oma rakenduse URL-id

Looge oma rakenduste kataloogis a urls.py faili ja seadistage oma URL-i mustrid järgmiselt:

alates django.urls importida tee
alates .vaateid importida TaskListView, TaskDetailView, TaskCreateView, TaskUpdateView, TaskDeleteView

urlmustrid =
tee ('', TaskListView.as_view(), nimi='ülesannete nimekiri'),
tee ('loo/', TaskCreateView.as_view(), nimi='task_create'),
tee ('ülesanded//', TaskDetailView.as_view(), nimi='task_detail'),
tee ('ülesanded//update/', TaskUpdateView.as_view(), nimi='task_update'),
tee ('ülesanded//delete/', TaskDeleteView.as_view(), nimi='task_delete'),
]

Ülaltoodud URL-i mustrid on sarnased funktsioonipõhiste vaadetega loodud URL-idega. Erinevus seisneb selles as_view() funktsioon lisatakse iga vaate nime lõppu.

Sa saad kasutage URL-ide loomiseks Django nälkjaid ülal kasutatud primaarvõtme asemel.

Looge oma vaadete jaoks malle

Kui lubate kasutajatel teha ülaltoodud vaadetes määratletud toiminguid, siis soovitate teil luua neile suhtlemiseks liidese. Varem loodud vaadetest peaks tegumihalduri rakendusel olema neli kasutajaliidest.

Looge oma rakenduste kataloogis neli HTML-i malli. Samuti peaksite looma base.html faili. Sa saad stiilige oma Django malle Bootstrapiga et aega kokku hoida.

Ülesannete loendi mall

See mall peaks sisaldama koodi, mis loetleb kõik mudeli ülesanded. Koodi skeleti näide on järgmine:

{% extends 'base.html' %}

{% blokeerida sisu %}
<Keskus>
<h1>Teie ülesandedh1>
<ahref="{% url 'task_create' %}">Lisa ülesannea>
{% ülesande jaoks ülesannetes %}
<div>
<div>
<h5>{{ ülesanne.title }}h5>
<lk>{{ task.description|truncatechars: 50 }}lk>
<lk>
<tugev>Lõpetatud:tugev>
{% if task.completed %}Jah{% else %}Ei{% endif %}
lk>
<ahref="{% url 'task_detail' task.pk %}">
Loe rohkem
a>
<ahref="{% url 'task_delete' task.pk %}">
Kustuta ülesanne
a>
div>
div>
{% tühi %}
<h3>Ülesandeid veel pole.h3>
<ahref="{% url 'task_create' %}">Lisa ülesannea>
{% endfor %}
Keskus>
{% endblock %}

Mõne Bootstrapi klassiga saate muuta oma lehe selliseks:

Ülesande üksikasjade mall

See leht peaks näitama iga loodud ülesande kõiki üksikasju. Siin on näidismalli, mida saate kasutada:

{% extends 'base.html' %}

{% blokeerida sisu %}
<h1>{{ ülesanne.title }}h1>
<lk>{{ ülesanne.kirjeldus }}lk>
<lk>Lõpetatud: {% if task.completed %}Jah{% else %}Ei{% endif %}lk>
<ahref="{% url 'task_update' task.pk %}">Redigeeri ülesanneta>
<ahref="{% url 'task_delete' task.pk %}">Kustuta ülesannea>
{% endblock %}

Sõltuvalt teie stiili lähenemisviisist peaks teie leht välja nägema järgmine:

Ülesande vormi mall

See mall peaks sisaldama vormi, mis võimaldab kasutajal ülesande luua või värskendada.

{% extends 'base.html' %}

{% blokeerida sisu %}
<h1>Loo ülesanneh1>
<vormimeetod="postitus">
{% csrf_token %}
{{ form.as_p }}
<nupputüüp="Esita">Salvestanuppu>
vormi>
{% endblock %}

Mall näeb välja selline:

Kustuta ülesande mall

See mall peaks olema kinnitusleht, et vältida ülesannete juhuslikku kustutamist.

{% extends 'base.html' %}

{% blokeerida sisu %}
<h1>Kinnitage kustutamineh1>
<lk>Kas olete kindel, et soovite faili "{{ object.title }}" kustutada?lk>
<vormimeetod="postitus">
{% csrf_token %}
<nupputüüp="Esita">Kustutanuppu>
<ahref="{% url 'task_list' %}">Tühistaa>
vormi>
{% endblock %}

Mõne Bootstrapi puhul peaks teie leht välja nägema järgmine:

Kasutage oma tootlikkuse suurendamiseks klassipõhiseid vaateid

Klassipõhised vaated on suurepärane viis lühikese aja jooksul puhta ja organiseeritud koodi kirjutamiseks, suurendades seeläbi oma tootlikkust. Peaksite neid oma projektides võimalikult palju kasutama. Samuti saate täiendavalt integreerida funktsioone, nagu otsingufunktsioonid, teatised ja nii edasi, et muuta oma tegumihalduri rakendus täisväärtuslikuks funktsionaalseks rakenduseks.