Sužinokite, kaip sukurti užduočių tvarkyklės programą, naudojant CRUD principus ir klasėmis pagrįstus rodinius Django.

Viena iš pagrindinių „Django“ ypatybių yra įmontuotas projektų kūrimo palaikymas kartu su CRUD (Create, Read, Update, Delete) operacijomis. Nors Django klasės rodiniai suteikia greitą, lengvą ir lankstų būdą kurti žiniatinklio programas, daugelis kūrėjų vis dar naudoja funkcijomis pagrįstus rodinius.

Klasėmis pagrįsti rodiniai turi keletą pranašumų, palyginti su funkcijomis pagrįsti rodiniai, įskaitant paveldėjimą, kodo struktūrizavimą, kodo pakartotinį naudojimą ir kt. Nors klasėmis pagrįstų rodinių įgyvendinimas gali pasirodyti šiek tiek sudėtingas, šis vadovas padės suprasti koncepciją, sukuriant užduočių tvarkyklės programą ir pateikiant nuoseklias instrukcijas.

Kas yra klasėmis pagrįsti vaizdai „Django“?

Django vaizdai yra Python funkcijos kurios priima žiniatinklio užklausą ir pateikia žiniatinklio atsakymą. Klasėmis pagrįsti rodiniai (CBV) yra alternatyvus būdas apibrėžti rodinius Django naudojant Python klases, o ne funkcijas.

instagram viewer

CBV turi keletą privalumų, tokių kaip geresnis kodo organizavimas, lengvesnis pakartotinis kodo naudojimas ir galimybė naudoti paveldėjimą kuriant esamų rodinių variantus. CBV taip pat siūlo integruotus metodus, tokius kaip gauti () ir post () metodus, kuriuos galite perrašyti pasirinktoms elgsenoms.

Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla.

„Django“ galima peržiūrėti pagal klases

„Django“ pateikia kai kuriuos integruotus CBV, skirtus populiariems naudojimo atvejams, pavyzdžiui, rodyti objektų sąrašus arba kurti naujus. Kai kurie iš šių įmontuotų CBV yra:

  1. Sarašas: Šiame rodinyje pateikiamas iš modelio gautų objektų sąrašas. Pavyzdžiui, puslapyje, kuriame pateikiami visi tinklaraščio įrašai, bus naudojamas a Sarašas.
  2. Išsamus vaizdas: Šis rodinys pateikia išsamų vieno objekto, gauto iš modelio, vaizdą. Galite naudoti a Išsamus vaizdas kad tinklaraščio programoje būtų rodoma konkrečių įrašų informacija.
  3. CreateView: šis rodinys pateikia formą, kad būtų sukurtas naujas objektas, ir tvarkomas formos pateikimas. Pavyzdžiui, užduočių tvarkyklės programoje šį rodinį naudosite kurdami naujas užduotis.
  4. IštrintiView: Šiame rodinyje pateikiamas patvirtinimo puslapis, skirtas ištrinti objektą, ir tvarkomas puslapio ištrynimas.
  5. UpdateView: šis rodinys pateikia formą esamam objektui atnaujinti ir tvarko formos pateikimą.

Django taip pat pateikia kitų vaizdų, įskaitant TemplateView, RedirectView, ir FormView. Galite remtis Django dokumentacija Norėdami gauti išsamios informacijos apie klasių rodinius.

Sukurkite užduočių tvarkyklės programą naudodami „Django“ klasės rodinius

Sukūrę programą, pvz., užduočių tvarkyklės programą, galėsite suprasti, kaip įgyvendinti CRUD operacijas su CBV. Užduočių tvarkytuvėje yra funkcijų, leidžiančių vartotojams kurti, atnaujinti, ištrinti ir skaityti užduotis. Šios savybės atitinka CRUD operacijas. Šie veiksmai padės sukurti užduočių tvarkyklės programą su Django CBV.

Sukurkite Django projektą

Norėdami sukurti užduočių tvarkyklės programą naudodami „Django“, turėtumėte pradėti atlikdami šiuos veiksmus:

  1. Įdiekite Django į savo Python virtuali aplinka su šia komanda:
    pip įdiegti django
  2. Sukurkite Django projektą. Ši komanda sukurs projektą pavadinimu project_core.
    django-admin startproject project_core .
  3. Sukurkite programą pavadinimu užduočių_vadybininkas.
    python manage.py startapp task_manager
  4. Jūsų settings.py pridėkite savo programos pavadinimą prie INSTALLED_APPS sąrašą.
    INSTALLED_APPS = [
    'užduočių_vadybininkas',
    ]
  5. Atidaryk urls.py failą savo projekto kataloge ir sukonfigūruokite savo URL adresus užduočių_vadybininkas programa:
     django.urls importuoti kelias, įtraukti

    urlpatterns = [
    kelias ('', įtraukti ('task_manager.urls')),
    ]

Sukurkite savo užduočių tvarkyklės programos modelį

Programų kataloge (arba užduočių_vadybininkas aplanką), atidarykite savo modeliai.py failą ir sukurkite užduočių tvarkyklės programos modelį. Štai pavyzdys, kurį galite naudoti:

 django.db importuoti modeliai

klasėUžduotis(modeliai. Modelis):
pavadinimas = modeliai. CharField (max_length=200)
aprašymas = modeliai. Teksto laukas()
baigtas = modeliai. Būlio laukas (numatytasis =Netiesa)
Created_at = modeliai. DateTimeField (auto_now_add=Tiesa)

Perkelkite modelį naudodami šią komandą:

python manage.py makemigrations && python manage.py migrate

Sukurkite „Django“ formą savo programai

Turėtumėte turėti tvarkymosi formą Sukurti ir Atnaujinti operacijos. Programų kataloge sukurkite failą pavadinimu forms.py. Štai pavyzdys:

 django importuoti formų
.modeliai importuoti Užduotis

klasėUžduočių forma(formos. ModelForm):
klasėMeta:
modelis = Užduotis
laukai = ["pavadinimas", 'apibūdinimas', 'baigta']

valdikliai = {
"pavadinimas": formos. Teksto įvestis (attrs={'klasė': "formos valdymas",}),
'apibūdinimas': formos. Textarea (attrs={'klasė': "formos valdymas",}),
'baigta': formos. CheckboxInput (attrs={'klasė': „formos patikrinimo įvestis“}),
}

Aukščiau pateiktame kode yra klasė, vadinama Užduočių forma kuri apibrėžia formos laukus ir valdiklius. Taip pat nurodomas naudotinas modelis.

Sukurkite Django rodinius kiekvienai CRUD operacijai

Norint efektyviai atlikti visas operacijas, pagrindinei CRUD programai su CBV reikia bent keturių rodinių. Kiti keli žingsniai parodys, kaip juos sukurti.

Importuokite reikalingus modulius ir paketus

Atidaryk savo views.py failą ir atlikite šiuos importavimo veiksmus:

 django.views.generic importuoti ListView, DetailView, CreateView, UpdateView, DeleteView
django.urls importuoti atvirkštinis_tinginys
.modeliai importuoti Užduotis
.formos importuoti Užduočių forma

Aukščiau pateiktas kodas importuoja penkis CBV. Taip pat importuoja atvirkštinis_tinginys peradresuoti vartotoją į nurodytą URL po formos pateikimo. Galiausiai ji importuoja Užduotis modelis ir Užduočių forma sukurta anksčiau.

Sukurkite rodinį, kad pateiktumėte modelio objektus

Užduočių tvarkyklės programoje turėtų būti puslapis, kuriame pateikiamos visos vartotojo sukurtos užduotys. Norėdami sukurti tam skirtą rodinį, turėtumėte naudoti Sarašas. Štai pavyzdys:

klasėTaskListView(Sarašas):
modelis = Užduotis
šablono_pavadinimas = „task_manager/task_list.html“
konteksto_objekto_pavadinimas = 'užduotys'

Aukščiau pateiktame rodinyje apibrėžiami trys atributai, kurie yra:

  1. modelis: Šis atributas apibrėžia, kurį modelį naudoti tam konkrečiam rodiniui.
  2. šablono_pavadinimas: Šis atributas nurodo „Django“, kurį šabloną pateikti naršyklei.
  3. konteksto_objekto_pavadinimas: Šis atributas apibrėžia pavadinimą, leidžiantį šablonui pasiekti modelio objektų sąrašą.

Daugumoje CBV bus šie trys atributai.

Sukurkite rodinį, kad galėtumėte tvarkyti užduoties informaciją

Kiekviena vartotojo sukurta užduotis turi turėti puslapį, kuriame būtų rodoma jos informacija. Idealus CBV tai išspręsti yra Išsami informacija. Štai paprastas pavyzdys:

klasėTaskDetailView(Išsamus vaizdas):
modelis = Užduotis
šablono_pavadinimas = „task_manager/task_detail.html“

Sukurkite užduočių kūrimo rodinį

Sukurkite rodinį, kad galėtumėte kurti arba pridėti naujų užduočių. Tai yra Sukurti CRUD operacijų dalis, o tinkamas vaizdas yra CreateView. Štai kaip juo naudotis:

klasėTaskCreateView(CreateView):
modelis = Užduotis
form_class = Užduočių forma
šablono_pavadinimas = „task_manager/task_form.html“
sėkmės_url = atvirkštinis_tinginys('užduočių sąrašas')

Aukščiau pateiktame kode pateikiami du nauji atributai: forma_klasė ir sėkmės_url.

The forma_klasė atributas nurodo rodiniui, kurią formos klasę pateikti ir naudoti savo operacijoms.

The sėkmės_url nurodo, kaip nukreipti vartotoją po formos pateikimo. Jis naudoja atvirkštinis_tinginys funkcija, kuri paima URL kelio pavadinimą.

Sukurkite užduočių redagavimo rodinį

Kad naudotojai galėtų redaguoti arba atnaujinti savo užduotis, turėtumėte sukurti rodinį, kuris atrodytų taip:

klasėTaskUpdateView(UpdateView):
modelis = Užduotis
form_class = Užduočių forma
šablono_pavadinimas = „task_manager/task_form.html“
sėkmės_url = atvirkštinis_tinginys('užduočių sąrašas')

Aukščiau pateiktas vaizdas yra panašus į TaskCreateView sukurta anksčiau. Vienintelis skirtumas yra naudojimas UpdateView.

Sukurkite rodinį, kad galėtumėte atlikti ištrynimo operacijas

Jei norite, kad naudotojai galėtų ištrinti užduotis kada tik nori, turėtumėte naudoti IštrintiView CBV. Štai pavyzdys:

klasėTaskDeleteView(DeleteView):
modelis = Užduotis
šablono_pavadinimas = „task_manager/task_confirm_delete.html“
sėkmės_url = atvirkštinis_tinginys('užduočių sąrašas')

Konfigūruokite savo programos URL

Programų kataloge sukurkite a urls.py failą ir sukonfigūruokite URL šablonus taip:

 django.urls importuoti kelias
.Peržiūros importuoti „TaskListView“, „TaskDetailView“, „TaskCreateView“, „TaskUpdateView“, „TaskDeleteView“

url šablonai =
kelias ('', TaskListView.as_view(), pavadinimas='užduočių sąrašas'),
kelias ('sukurti/', TaskCreateView.as_view(), pavadinimas=„užduotis_kurti“),
kelias ('užduotys//', TaskDetailView.as_view(), pavadinimas=„užduotis_detalė“),
kelias ('užduotys//update/', TaskUpdateView.as_view(), pavadinimas=„task_update“),
kelias ('užduotys//delete/', TaskDeleteView.as_view(), pavadinimas=„užduotis_trinti“),
]

Anksčiau pateikti URL šablonai yra panašūs į URL, sukurtus naudojant funkcijomis pagrįstus rodinius. Skirtumas yra tas as_view() funkcija pridedama prie kiekvieno rodinio pavadinimo pabaigos.

Tu gali naudokite „Django“ šliužus, kad sukurtumėte URL vietoj pirmiau naudoto pirminio rakto.

Kurkite šablonus savo rodiniams

Leidžiant naudotojams atlikti veiksmus, nurodytus anksčiau pateiktuose rodiniuose, siūloma pateikti sąsają, su kuria jie galėtų bendrauti. Iš anksčiau sukurtų rodinių užduočių tvarkyklės programėlė turėtų turėti keturias vartotojo sąsajas.

Programų kataloge sukurkite keturis HTML šablonus. Taip pat turėtumėte sukurti base.html failą. Tu gali stilizuokite savo „Django“ šablonus naudodami „Bootstrap“. taupyti laiką.

Užduočių sąrašo šablonas

Šiame šablone turėtų būti kodas, išvardijantis visas modelio užduotis. Skeleto kodo pavyzdys yra toks:

{% extends 'base.html' %}

{% blokuoti turinį %}
<centras>
<h1>Jūsų užduotysh1>
<ahref=„{% url 'task_create' %}“>Pridėti užduotįa>
{% užduočiai užduotyse %}
<div>
<div>
<h5>{{ task.title }}h5>
<p>{{ task.description|truncatechars: 50 }}p>
<p>
<stiprus>Užbaigta:stiprus>
{% if task.completed %}Taip{% else %}Ne{% endif %}
p>
<ahref="{% url 'task_detail' task.pk %}">
Skaityti daugiau
a>
<ahref="{% url 'task_delete' task.pk %}">
Ištrinti užduotį
a>
div>
div>
{% tuščia %}
<h3>Užduočių dar nėra.h3>
<ahref=„{% url 'task_create' %}“>Pridėti užduotįa>
{% endfor %}
centras>
{% endblock %}

Naudodami kai kurias „Bootstrap“ klases galite padaryti savo puslapį taip:

Išsamios užduoties šablonas

Šiame puslapyje turėtų būti rodoma visa informacija apie kiekvieną sukurtą užduotį. Štai pavyzdys, kurį galite naudoti:

{% extends 'base.html' %}

{% blokuoti turinį %}
<h1>{{ task.title }}h1>
<p>{{ task.description }}p>
<p>Užbaigta: {% if task.completed %}Taip{% else %}Ne{% endif %}p>
<ahref="{% url 'task_update' task.pk %}">Redaguoti užduotįa>
<ahref="{% url 'task_delete' task.pk %}">Ištrinti užduotįa>
{% endblock %}

Atsižvelgiant į jūsų stiliaus metodą, jūsų puslapis turėtų atrodyti taip:

Užduočių formos šablonas

Šiame šablone turi būti forma, leidžianti vartotojui sukurti arba atnaujinti užduotį.

{% extends 'base.html' %}

{% blokuoti turinį %}
<h1>Sukurti užduotįh1>
<formametodas="post">
{% csrf_token %}
{{ form.as_p }}
<mygtukątipo="Pateikti">Sutaupytimygtuką>
forma>
{% endblock %}

Šablonas atrodys taip:

Ištrinkite užduoties šabloną

Šis šablonas turėtų būti patvirtinimo puslapis, kad būtų išvengta atsitiktinio užduočių ištrynimo.

{% extends 'base.html' %}

{% blokuoti turinį %}
<h1>Patvirtinkite Ištrintih1>
<p>Ar tikrai norite ištrinti „{{ object.title }}“?p>
<formametodas="post">
{% csrf_token %}
<mygtukątipo="Pateikti">Ištrintimygtuką>
<ahref="{% url 'task_list' %}">Atšauktia>
forma>
{% endblock %}

Naudojant tam tikrą „Bootstrap“, jūsų puslapis turėtų atrodyti taip:

Naudokite klasėmis pagrįstus rodinius, kad padidintumėte produktyvumą

Klasėmis pagrįsti rodiniai yra puikus būdas per trumpą laiką parašyti švarų, tvarkingą kodą ir taip padidinti produktyvumą. Turėtumėte kuo dažniau juos naudoti savo projektuose. Be to, galite toliau integruoti tokias funkcijas kaip paieškos funkcija, pranešimai ir pan., kad užduočių tvarkyklės programa taptų visaverte funkcine programa.