Naučite se zgraditi aplikacijo za upravitelja opravil z uporabo načel CRUD in pogledov, ki temeljijo na razredih v Djangu.

Ena od ključnih lastnosti Djanga je njegova vgrajena podpora za ustvarjanje projektov poleg operacij CRUD (ustvari, preberi, posodobi, izbriši). Medtem ko pogledi, ki temeljijo na razredih Django, zagotavljajo hiter, enostaven in prilagodljiv način za izdelavo spletnih aplikacij, mnogi razvijalci še vedno uporabljajo poglede, ki temeljijo na funkcijah.

Pogledi, ki temeljijo na razredih, ponujajo številne prednosti pred pogledi, ki temeljijo na funkcijah, vključno z dedovanjem, strukturiranjem kode, možnostjo ponovne uporabe kode in več. Čeprav se uvedba pogledov, ki temeljijo na razredih, morda zdi nekoliko zapletena, vam bo ta vodnik pomagal razumeti koncept z izdelavo aplikacije za upravitelja opravil in zagotavljanjem navodil po korakih.

Kaj so pogledi, ki temeljijo na razredu, v Djangu?

V Djangu so pogledi Python funkcije ki sprejmejo spletno zahtevo in vrnejo spletni odgovor. Pogledi, ki temeljijo na razredih (CBV) so alternativni način definiranja pogledov v Djangu z uporabo razredov Python namesto funkcij.

CBV imajo številne prednosti, kot so boljša organizacija kode, lažja ponovna uporaba kode in možnost uporabe dedovanja za ustvarjanje različic obstoječih pogledov. CBV ponujajo tudi vgrajene metode, kot je dobiti () in objava() metode, ki jih lahko prepišete za vedenja po meri.

Koda, uporabljena v tem članku, je na voljo tukaj Repozitorij GitHub.

Pogledi, ki temeljijo na razredih, so na voljo v Djangu

Django ponuja nekaj vgrajenih CBV-jev za priljubljene primere uporabe, kot je prikazovanje seznamov predmetov ali ustvarjanje novih. Nekateri od teh vgrajenih CBV so:

  1. Pogled seznama: Ta pogled upodobi seznam predmetov, pridobljenih iz modela. Na primer, stran, ki navaja vse objave, ki so na voljo v blogu, bo uporabljala a Pogled seznama.
  2. DetailView: Ta pogled upodobi podroben pogled posameznega predmeta, pridobljenega iz modela. Uporabite lahko a DetailView za prikaz podrobnosti določenih objav v spletni aplikaciji.
  3. CreateView: Ta pogled upodablja obrazec za ustvarjanje novega predmeta in obravnava oddajo obrazca. Na primer, v aplikaciji upravitelja opravil boste ta pogled uporabili za ustvarjanje novih opravil.
  4. DeleteView: Ta pogled upodobi potrditveno stran za brisanje predmeta in obravnava brisanje strani.
  5. UpdateView: Ta pogled upodobi obrazec za posodobitev obstoječega predmeta in obravnava predložitev obrazca.

Django ponuja tudi druge poglede, vključno z TemplateView, RedirectView, in FormView. Lahko se sklicujete na Djangova dokumentacija za podrobne informacije o pogledih, ki temeljijo na razredu.

Zgradite aplikacijo Upravitelj opravil s pogledi, ki temeljijo na razredih Django

Izdelava aplikacije, kot je aplikacija za upravljanje opravil, vam bo omogočila razumevanje izvajanja operacij CRUD s CBV. Upravitelj opravil ima funkcije, ki uporabnikom omogočajo ustvarjanje, posodabljanje, brisanje in branje opravil. Te funkcije so v skladu z operacijami CRUD. Naslednji koraki vam bodo pomagali zgraditi aplikacijo upravitelja opravil z Django CBV.

Nastavite projekt Django

Če želite ustvariti aplikacijo za upravitelja opravil z Django, začnite tako, da sledite tem korakom:

  1. Namestite Django v svoj Virtualno okolje Python s tem ukazom:
    pip namestite django
  2. Ustvarite projekt Django. Naslednji ukaz bo ustvaril projekt, imenovan project_core.
    django-admin startproject project_core.
  3. Ustvarite aplikacijo, imenovano upravitelj opravil.
    python manage.py startapp task_manager
  4. V vašem nastavitve.py dodajte ime svoje aplikacije v INSTALLED_APPS seznam.
    INSTALLED_APPS = [
    'upravitelj opravil',
    ]
  5. Odprite urls.py datoteko v imeniku vašega projekta in konfigurirajte URL-je za svoj upravitelj opravil aplikacija:
    od django.urls uvoz pot, vključite

    urlvzorci = [
    pot('', vključi('task_manager.urls')),
    ]

Ustvarite model za svojo aplikacijo Task Manager

V vašem imeniku aplikacij (ali upravitelj opravil mapo), odprite svojo models.py datoteko in ustvarite model za aplikacijo upravitelja opravil. Tukaj je vzorčni model, ki ga lahko uporabite:

od django.db uvoz modeli

razredNaloga(modeli. model):
naslov = modeli. CharField (max_length=200)
opis = modeli. TextField()
dokončano = modeli. BooleanField (privzeto=False)
created_at = modeli. DateTimeField (auto_now_add=Prav)

Preselite svoj model s tem ukazom:

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

Ustvarite obrazec Django za svojo aplikacijo

Imeti morate obrazec za obdelavo Ustvari in Nadgradnja operacije. V imeniku aplikacij ustvarite datoteko z imenom forms.py. Tukaj je primer:

od django uvoz obrazci
od .modeli uvoz Naloga

razredTaskForm(obrazci. ModelForm):
razredMeta:
model = Naloga
polja = ['naslov', 'opis', 'zaključeno']

pripomočki = {
'naslov': obrazci. TextInput (attr={'razred': 'form-control',}),
'opis': obrazci. Textarea (attrs={'razred': 'form-control',}),
'zaključeno': obrazci. CheckboxInput (attr={'razred': 'form-check-input'}),
}

Zgornja koda ima razred, imenovan TaskForm ki določa polja in gradnike obrazca. Določa tudi model za uporabo.

Ustvarite poglede Django za vsako operacijo CRUD

Osnovna aplikacija CRUD s CBV zahteva vsaj štiri poglede za učinkovito upravljanje vseh operacij. Naslednjih nekaj korakov vam bo pokazalo, kako jih ustvarite.

Uvozite potrebne module in pakete

Odpri svojo views.py datoteko in naredite naslednje uvoze:

od django.views.generic uvoz ListView, DetailView, CreateView, UpdateView, DeleteView
od django.urls uvoz reverse_lazy
od .modeli uvoz Naloga
od .obrazci uvoz TaskForm

Zgornja koda uvozi pet CBV. Prav tako uvaža reverse_lazy za preusmeritev uporabnika na določen URL po oddaji obrazca. Končno uvozi Naloga model in TaskForm ustvarjen prej.

Ustvarite pogled za seznam predmetov modela

Aplikacija upravitelja opravil mora imeti stran s seznamom vseh nalog, ki jih ustvari uporabnik. Če želite ustvariti pogled za to, morate uporabiti Pogled seznama. Tukaj je primer:

razredTaskListView(Pogled seznama):
model = Naloga
ime_predloge = 'task_manager/task_list.html'
ime_objekta_konteksta = 'naloge'

Zgornji pogled definira tri atribute, ki so:

  1. model: Ta atribut določa, kateri model je treba uporabiti za določen pogled.
  2. ime_predloge: Ta atribut pove Djangu, katero predlogo naj upodablja brskalnik.
  3. ime_kontekstnega_objekta: Ta atribut določa ime, ki predlogi omogoča dostop do seznama objektov v modelu.

Večina CBV bo vsebovala te tri atribute.

Ustvarite pogled za obdelavo podrobnosti opravila

Vsaka naloga, ki jo ustvari uporabnik, mora imeti stran s podrobnostmi. Idealen CBV za to je DetailVew. Tukaj je preprost primer:

razredTaskDetailView(DetailView):
model = Naloga
ime_predloge = 'task_manager/task_detail.html'

Ustvarite pogled za ustvarjanje opravil

Ustvarite pogled za upravljanje ustvarjanja ali dodajanja novih nalog. To je Ustvari del operacij CRUD in pravi pogled za to je CreateView. Uporabite ga tako:

razredTaskCreateView(CreateView):
model = Naloga
form_class = TaskForm
ime_predloge = 'task_manager/task_form.html'
success_url = reverse_lazy('seznam_opravil')

Zgornja koda uvaja dva nova atributa: obrazec_razred in uspeh_url.

The obrazec_razred atribut pove pogledu, kateri razred obrazca naj upodobi in uporabi za svoje operacije.

The uspeh_url določa, kako preusmeriti uporabnika po oddaji obrazca. Uporablja reverse_lazy funkcijo, ki prevzame ime poti URL.

Ustvarite pogled za urejanje opravil

Če želite svojim uporabnikom omogočiti urejanje ali posodabljanje svojih nalog, bi morali ustvariti pogled, ki je videti takole:

razredTaskUpdateView(UpdateView):
model = Naloga
form_class = TaskForm
ime_predloge = 'task_manager/task_form.html'
success_url = reverse_lazy('seznam_opravil')

Zgornji pogled je podoben TaskCreateView ustvarjen prej. Edina razlika je uporaba UpdateView.

Ustvarite pogled za upravljanje operacij brisanja

Če želite svojim uporabnikom omogočiti brisanje opravil, kadar koli želijo, uporabite DeleteView CBV. Tukaj je primer:

razredTaskDeleteView(DeleteView):
model = Naloga
ime_predloge = 'task_manager/task_confirm_delete.html'
success_url = reverse_lazy('seznam_opravil')

Konfigurirajte URL-je svoje aplikacije

V imeniku aplikacij ustvarite a urls.py in konfigurirajte svoje vzorce URL takole:

od django.urls uvoz pot
od .pogledi uvoz TaskListView, TaskDetailView, TaskCreateView, TaskUpdateView, TaskDeleteView

vzorci url =
pot('', TaskListView.as_view(), name='seznam_opravil'),
pot('ustvari/', TaskCreateView.as_view(), name='task_create'),
pot('naloge//', TaskDetailView.as_view(), name='task_detail'),
pot('naloge//update/', TaskUpdateView.as_view(), name='task_update'),
pot('naloge//delete/', TaskDeleteView.as_view(), name='task_delete'),
]

Zgornji vzorci URL-jev so podobni URL-jem, ustvarjenim s pogledi, ki temeljijo na funkcijah. Razlika je v as_view() funkcija, dodana na konec vsakega imena pogleda.

Ti lahko uporabite polže Django za ustvarjanje URL-jev namesto zgoraj uporabljenega primarnega ključa.

Ustvarite predloge za svoje poglede

Če svojim uporabnikom dovolite, da izvajajo dejanja, opredeljena v zgornjih pogledih, pomeni, da jim zagotovite vmesnik za interakcijo. Glede na prej ustvarjene poglede bi morala imeti aplikacija upravitelja opravil štiri uporabniške vmesnike.

V imeniku aplikacij ustvarite štiri predloge HTML. Moral bi tudi ustvarjati base.html mapa. Ti lahko oblikujte svoje Django predloge z Bootstrapom da prihranite čas.

Predloga seznama opravil

Ta predloga mora vsebovati kodo, ki navaja vse naloge v modelu. Skeletni primer kode je ta:

{% razširi 'base.html' %}

{% blok vsebine %}
<center>
<h1>Vaše nalogeh1>
<ahref="{% url 'task_create' %}">Dodaj opraviloa>
{% za opravilo v opravilih %}
<div>
<div>
<h5>{{ task.title }}h5>
<str>{{ task.description|truncatechars: 50 }}str>
<str>
<močan>Dokončano:močan>
{% if task.completed %}Da{% else %}Ne{% endif %}
str>
<ahref="{% url 'task_detail' task.pk %}">
Preberi več
a>
<ahref="{% url 'task_delete' task.pk %}">
Izbriši nalogo
a>
div>
div>
{% prazno %}
<h3>Ni še nalog.h3>
<ahref="{% url 'task_create' %}">Dodaj opraviloa>
{% endfor %}
center>
{% endblock %}

Z nekaterimi razredi Bootstrap lahko naredite svojo stran takole:

Predloga podrobnosti naloge

Na tej strani bi morale biti prikazane vse podrobnosti o vsaki ustvarjeni nalogi. Tukaj je primer predloge, ki jo lahko uporabite:

{% razširi 'base.html' %}

{% blok vsebine %}
<h1>{{ task.title }}h1>
<str>{{ task.description }}str>
<str>Dokončano: {% if task.completed %}Da{% else %}Ne{% endif %}str>
<ahref="{% url 'task_update' task.pk %}">Uredi nalogoa>
<ahref="{% url 'task_delete' task.pk %}">Izbriši nalogoa>
{% endblock %}

Odvisno od vašega stilskega pristopa bi morala biti vaša stran videti takole:

Predloga obrazca naloge

Ta predloga mora vsebovati obrazec, ki uporabniku omogoča ustvarjanje ali posodobitev opravila.

{% razširi 'base.html' %}

{% blok vsebine %}
<h1>Ustvari nalogoh1>
<oblikametoda="post">
{% csrf_token %}
{{ form.as_p }}
<gumbvrsta="oddaj">Shranigumb>
oblika>
{% endblock %}

Predloga bo videti takole:

Izbriši predlogo opravila

Ta predloga bi morala biti potrditvena stran, da preprečite nenamerno brisanje opravil.

{% razširi 'base.html' %}

{% blok vsebine %}
<h1>Potrdite Izbriših1>
<str>Ali ste prepričani, da želite izbrisati »{{ object.title }}«?str>
<oblikametoda="post">
{% csrf_token %}
<gumbvrsta="oddaj">Izbrišigumb>
<ahref="{% url 'task_list' %}">Prekličia>
oblika>
{% endblock %}

Z nekaj Bootstrapa bi morala biti vaša stran videti takole:

Uporabite poglede, ki temeljijo na razredu, da povečate svojo produktivnost

Pogledi, ki temeljijo na razredih, so odličen način za pisanje čiste, organizirane kode v kratkem času, s čimer povečate svojo produktivnost. Uporabite jih v svojih projektih čim več. Prav tako lahko dodatno integrirate funkcije, kot so funkcija iskanja, obvestila in tako naprej, da bo vaša aplikacija upravitelja opravil popolnoma delujoča aplikacija.