Naučite kako izraditi aplikaciju za upravljanje zadacima koristeći načela CRUD-a i pogleda temeljenih na klasama u Djangu.

Jedna od ključnih značajki Djanga je njegova ugrađena podrška za stvaranje projekata povrh CRUD (Create, Read, Update, Delete) operacija. Dok Djangovi pogledi temeljeni na klasama pružaju brz, jednostavan i fleksibilan način za izradu web aplikacija, mnogi programeri i dalje koriste poglede temeljene na funkcijama.

Pogledi temeljeni na klasi nude nekoliko prednosti u odnosu na poglede temeljene na funkciji, uključujući nasljeđivanje, strukturiranje koda, mogućnost ponovne upotrebe koda i još mnogo toga. Iako se implementacija pogleda temeljenih na klasi može činiti pomalo složenom, ovaj će vam vodič pomoći u razumijevanju koncepta izgradnjom aplikacije za upravljanje zadacima i pružanjem uputa korak po korak.

Što su pogledi temeljeni na klasi u Djangu?

U Djangu su pogledi Python funkcije koji preuzimaju web zahtjev i vraćaju web odgovor. Pogledi temeljeni na klasama (CBV) alternativni su način definiranja pogleda u Djangu koristeći Python klase umjesto funkcija.

instagram viewer

CBV-ovi imaju nekoliko prednosti, poput bolje organizacije koda, lakše ponovne upotrebe koda i mogućnosti korištenja nasljeđivanja za stvaranje varijacija postojećih pogleda. CBV također pružaju ugrađene metode kao što su dobiti() i post() metode koje možete prebrisati za prilagođena ponašanja.

Kôd korišten u ovom članku dostupan je u ovom GitHub spremište.

Prikazi temeljeni na klasi dostupni u Djangu

Django nudi neke ugrađene CBV-ove za popularne slučajeve upotrebe, kao što je prikazivanje popisa objekata ili stvaranje novih. Neki od ovih ugrađenih CBV-ova su:

  1. ListView: Ovaj pogled prikazuje popis objekata dohvaćenih iz modela. Na primjer, stranica koja navodi sve postove dostupne na blogu koristit će a ListView.
  2. Detaljan pogled: Ovaj prikaz daje detaljan prikaz jednog objekta dohvaćenog iz modela. Možete koristiti a Detaljan pogled za prikaz pojedinosti o određenim objavama u aplikaciji za blog.
  3. CreateView: Ovaj pogled prikazuje obrazac za stvaranje novog objekta i upravlja podnošenjem obrasca. Na primjer, u aplikaciji upravitelja zadataka koristit ćete ovaj prikaz za stvaranje novih zadataka.
  4. DeleteView: Ovaj pogled prikazuje stranicu potvrde za brisanje objekta i upravlja brisanjem stranice.
  5. UpdateView: Ovaj prikaz prikazuje obrazac za ažuriranje postojećeg objekta i upravlja podnošenjem obrasca.

Django također nudi druge poglede, uključujući TemplateView, RedirectView, i FormView. Možete se pozvati na Djangova dokumentacija za detaljne informacije o pogledima temeljenim na klasama.

Izradite aplikaciju Upravitelj zadataka s Django prikazima temeljenim na klasi

Izrada aplikacije kao što je aplikacija za upravljanje zadacima omogućit će vam da razumijete kako implementirati CRUD operacije s CBV-ovima. Upravitelj zadataka ima značajke koje korisnicima omogućuju stvaranje, ažuriranje, brisanje i čitanje zadataka. Ove značajke su u skladu s CRUD operacijama. Sljedeći koraci pomoći će vam da napravite aplikaciju upravitelja zadataka s Django CBV-ovima.

Postavite Django projekt

Da biste izradili aplikaciju upravitelja zadataka s Djangom, trebali biste započeti slijedeći ove korake:

  1. Instalirajte Django u svoj Python virtualno okruženje ovom naredbom:
    pip instaliraj django
  2. Napravite Django projekt. Sljedeća naredba će stvoriti projekt pod nazivom jezgra_projekta.
    django-admin startproject project_core .
  3. Napravite aplikaciju tzv upravitelj zadataka.
    python manage.py startapp task_manager
  4. U vašem postavke.py dodajte naziv svoje aplikacije u INSTALLED_APPS popis.
    INSTALLED_APPS = [
    'upravitelj zadataka',
    ]
  5. Otvori urls.py datoteku u direktoriju vašeg projekta i konfigurirajte URL-ove za svoj upravitelj zadataka aplikacija:
    iz django.urls uvoz put, uključiti

    url uzorci = [
    staza('', uključi('task_manager.urls')),
    ]

Napravite model za svoju aplikaciju Task Manager

U direktoriju vaših aplikacija (ili upravitelj zadataka mapu), otvorite svoju modeli.py datoteku i izradite model za svoju aplikaciju upravitelja zadataka. Evo primjera modela koji možete koristiti:

iz django.db uvoz modeli

razredaZadatak(modeli. Model):
naslov = modeli. CharField (max_length=200)
opis = modeli. Polje za tekst()
završeno = modeli. BooleanField (zadano=lažno)
created_at = modeli. DateTimeField (auto_now_add=Pravi)

Migrirajte svoj model ovom naredbom:

python manage.py makemigrations && python manage.py migrirati

Napravite Django obrazac za svoju aplikaciju

Trebali biste imati obrazac za rukovanje Stvoriti i Ažuriraj operacije. U direktoriju aplikacije stvorite datoteku pod nazivom oblici.py. Evo primjera:

iz django uvoz oblicima
iz .modeli uvoz Zadatak

razredaTaskForm(obrasci. ModelForm):
razredaMeta:
model = Zadatak
polja = ['titula', 'opis', 'dovršeno']

widgeti = {
'titula': obrasci. TextInput (attrs={'razred': 'kontrola obrasca',}),
'opis': obrasci. Textarea (attrs={'razred': 'kontrola obrasca',}),
'dovršeno': obrasci. CheckboxInput (attrs={'razred': 'form-check-input'}),
}

Gornji kod ima klasu pod nazivom TaskForm koji definira polja i widgete forme. Također navodi model koji će se koristiti.

Stvorite Django prikaze za svaku CRUD operaciju

Osnovna CRUD aplikacija s CBV-ovima zahtijeva najmanje četiri prikaza za učinkovito rukovanje svim operacijama. Sljedećih nekoliko koraka pokazat će vam kako ih izraditi.

Uvezite potrebne module i pakete

Otvori svoju pogledi.py datoteku i napravite sljedeće uvoze:

iz django.views.generic uvoz ListView, DetailView, CreateView, UpdateView, DeleteView
iz django.urls uvoz obrnuti_lijeni
iz .modeli uvoz Zadatak
iz .forme uvoz TaskForm

Gornji kod uvozi pet CBV-ova. Također uvozi obrnuti_lijeni za preusmjeravanje korisnika na određeni URL nakon slanja obrasca. Konačno, uvozi Zadatak model, i TaskForm stvoren ranije.

Stvorite pogled za popis objekata modela

Aplikacija upravitelja zadataka trebala bi imati stranicu s popisom svih zadataka koje je izradio korisnik. Da biste stvorili prikaz za ovo, trebali biste koristiti ListView. Evo primjera:

razredaTaskListView(ListView):
model = Zadatak
naziv_predloška = 'task_manager/task_list.html'
ime_objekta_konteksta = 'zadaci'

Gornji pogled definira tri atributa koji su:

  1. model: Ovaj atribut definira koji model koristiti za taj određeni prikaz.
  2. naziv_predloška: Ovaj atribut govori Djangu koji predložak treba prikazati pregledniku.
  3. ime_objekta_konteksta: Ovaj atribut definira naziv koji predlošku omogućuje pristup popisu objekata u modelu.

Većina CBV-ova će sadržavati ova tri atributa.

Stvorite prikaz za obradu pojedinosti o zadatku

Svaki zadatak koji korisnik kreira treba imati stranicu koja prikazuje njegove pojedinosti. Idealan CBV za ovo je DetailVew. Evo jednostavnog primjera:

razredaTaskDetailView(Detaljan pogled):
model = Zadatak
naziv_predloška = 'task_manager/task_detail.html'

Stvorite prikaz za izradu zadatka

Stvorite prikaz za upravljanje stvaranjem ili dodavanjem novih zadataka. Ovo je Stvoriti dio CRUD operacija, a pravi pogled za to je CreateView. Evo kako ga koristiti:

razredaTaskCreateView(CreateView):
model = Zadatak
klasa_forme = Obrazac zadatka
naziv_predloška = 'task_manager/task_form.html'
uspjeh_url = obrnuti_lijeni('lista zadataka')

Gornji kod uvodi dva nova atributa: klasa_forme i uspjeh_url.

The klasa_forme atribut govori pogledu koju klasu obrasca prikazati i koristiti za svoje operacije.

The uspjeh_url navodi kako preusmjeriti korisnika nakon slanja obrasca. Koristi se obrnuti_lijeni funkcija koja uzima naziv putanje URL-a.

Stvorite prikaz za zadatke uređivanja

Da biste svojim korisnicima omogućili uređivanje ili ažuriranje svojih zadataka, trebali biste izraditi prikaz koji izgleda ovako:

razredaTaskUpdateView(UpdateView):
model = Zadatak
klasa_forme = Obrazac zadatka
naziv_predloška = 'task_manager/task_form.html'
uspjeh_url = obrnuti_lijeni('lista zadataka')

Gornji prikaz sličan je prikazu TaskCreateView stvoren ranije. Jedina je razlika u korištenju UpdateView.

Stvorite pogled za rukovanje operacijama brisanja

Da biste svojim korisnicima omogućili brisanje zadataka kad god žele, trebali biste koristiti DeleteView CBV. Evo primjera:

razredaTaskDeleteView(DeleteView):
model = Zadatak
naziv_predloška = 'task_manager/task_confirm_delete.html'
uspjeh_url = obrnuti_lijeni('lista zadataka')

Konfigurirajte URL-ove svoje aplikacije

U direktoriju vaših aplikacija stvorite a urls.py datoteku i konfigurirajte svoje URL uzorke ovako:

iz django.urls uvoz staza
iz .pogleda uvoz TaskListView, TaskDetailView, TaskCreateView, TaskUpdateView, TaskDeleteView

url uzorci =
staza('', TaskListView.as_view(), name='lista zadataka'),
staza('stvoriti/', TaskCreateView.as_view(), name='task_create'),
staza('zadaci//', TaskDetailView.as_view(), name='task_detail'),
staza('zadaci//update/', TaskUpdateView.as_view(), name='task_update'),
staza('zadaci//delete/', TaskDeleteView.as_view(), name='task_delete'),
]

Gore navedeni obrasci URL-ova slični su URL-ovima stvorenim pomoću prikaza koji se temelje na funkcijama. Razlika je u as_view() funkcija pridodana na kraj svakog naziva pogleda.

Možeš koristite Django puževe za stvaranje URL-ova umjesto gore korištenog primarnog ključa.

Izradite predloške za svoje poglede

Dopuštanje vašim korisnicima da izvode radnje definirane u gornjim pogledima sugerira da im osigurate sučelje s kojim mogu komunicirati. Iz ranije stvorenih prikaza, aplikacija upravitelja zadataka trebala bi imati četiri korisnička sučelja.

U direktoriju aplikacije izradite četiri HTML predloška. Također biste trebali stvarati baza.html datoteka. Možeš stilizirajte svoje Django predloške pomoću Bootstrapa da uštedi vrijeme.

Predložak popisa zadataka

Ovaj predložak treba sadržavati kod koji navodi sve zadatke u modelu. Skeletni primjer koda je sljedeći:

{% proširuje 'base.html' %}

{% blokiraj sadržaj %}
<centar>
<h1>Vaši zadacih1>
<ahref="{% url 'task_create' %}">Dodaj zadataka>
{% za zadatak u zadacima %}
<div>
<div>
<h5>{{ task.title }}h5>
<str>{{ task.description|truncatechars: 50 }}str>
<str>
<snažna>Završeno:snažna>
{% if task.completed %}Da{% else %}Ne{% endif %}
str>
<ahref="{% url 'task_detail' task.pk %}">
Čitaj više
a>
<ahref="{% url 'task_delete' task.pk %}">
Izbriši zadatak
a>
div>
div>
{% prazno %}
<h3>Još nema zadataka.h3>
<ahref="{% url 'task_create' %}">Dodaj zadataka>
{% endfor %}
centar>
{% endblock %}

S nekim Bootstrap klasama, možete učiniti da vaša stranica izgleda ovako:

Predložak detalja zadatka

Ova bi stranica trebala prikazati sve pojedinosti o svakom kreiranom zadatku. Evo primjera predloška koji možete koristiti:

{% proširuje 'base.html' %}

{% blokiraj sadržaj %}
<h1>{{ task.title }}h1>
<str>{{ opis zadatka }}str>
<str>Završeno: {% if task.completed %}Da{% else %}Ne{% endif %}str>
<ahref="{% url 'task_update' task.pk %}">Uredi zadataka>
<ahref="{% url 'task_delete' task.pk %}">Izbriši zadataka>
{% endblock %}

Ovisno o vašem pristupu oblikovanju, vaša bi stranica trebala izgledati ovako:

Predložak obrasca zadatka

Ovaj predložak treba sadržavati obrazac koji korisniku omogućuje stvaranje ili ažuriranje zadatka.

{% proširuje 'base.html' %}

{% blokiraj sadržaj %}
<h1>Kreiraj zadatakh1>
<oblikmetoda="post">
{% csrf_token %}
{{ form.as_p }}
<dugmetip="podnijeti">Uštedjetidugme>
oblik>
{% endblock %}

Predložak će izgledati ovako:

Brisanje predloška zadatka

Ovaj bi predložak trebao biti stranica za potvrdu kako bi se spriječilo slučajno brisanje zadataka.

{% proširuje 'base.html' %}

{% blokiraj sadržaj %}
<h1>Potvrdite brisanjeh1>
<str>Jeste li sigurni da želite izbrisati "{{ object.title }}"?str>
<oblikmetoda="post">
{% csrf_token %}
<dugmetip="podnijeti">Izbrisatidugme>
<ahref="{% url 'task_list' %}">Otkazatia>
oblik>
{% endblock %}

Uz nešto Bootstrapa, vaša bi stranica trebala izgledati ovako:

Upotrijebite prikaze temeljene na klasi da biste povećali svoju produktivnost

Pogledi temeljeni na klasi izvrstan su način za pisanje čistog, organiziranog koda u kratkom vremenu, čime se povećava vaša produktivnost. Trebali biste ih koristiti u svojim projektima što je više moguće. Također, možete dodatno integrirati značajke kao što su funkcija pretraživanja, obavijesti i tako dalje kako biste svoju aplikaciju upravitelja zadataka učinili potpuno funkcionalnom aplikacijom.