Paranna Django-sovelluksesi tehokkuutta ja skaalautuvuutta ottamalla käyttöön sivutus. Tässä on kaikki, mitä sinun tulee tietää aloittaaksesi.
Sivutus parantaa käyttökokemusta ja sovellusten suorituskykyä suuria tietojoukkoja käsiteltäessä. Ilman sivutusjärjestelmää sovelluksesi viivästyy suurimman osan ajasta. Djangon avulla voit hyödyntää sisäänrakennettua sivutustukea verkkosovelluksesi sivuittamiseen.
Kuinka sivutus toimii Djangossa
Sivuttamisen toteuttaminen Djangossa voi vaihdella riippuen siitä, käytätkö luokka- vai funktiopohjaisia näkymiä. Riippumatta valitsemastasi menetelmästä, taustalla olevat periaatteet pysyvät samoina.
Django käyttää luokkaa nimeltä Sivuttaja toteuttaa sivutus. The Sivuttaja luokka tarjoaa useita menetelmiä, joilla voit mukauttaa sivutustasi. Kun alustetaan Sivuttaja luokka, se vaatii kaksi pakollista parametria; sivutettavat tiedot ja sivulla näytettävien kohteiden määrä. The Sivuttaja ottaa käyttöön kolmannen valinnaisen parametrin orvoille määrittääkseen viimeiselle sivulle jäävien kohteiden vähimmäismäärän. Oletusarvoisesti orpojen arvo on 0, mikä tarkoittaa, että kaikilla sivuilla on sama määrä kohteita.
Django-sivutussivun URL-osoite on samanlainen kuin tämä: https://example.com/products/?page=3. The sivu URL-osoitteen parametri kertoo Djangolle, minkä sivun käyttäjä haluaa nähdä. Se auttaa myös Djangoa määrittämään, mikä osa tiedoista näytetään kyseisellä sivulla.
Tässä projektissa käytetty koodi on saatavilla a GitHub-arkisto ja sen käyttö on ilmaista MIT-lisenssin alaisena.
Määritä Django-projektisi sivutusta varten
Ennen kuin sivutat Djangossa, sinun on oltava asensi Djangon ja asenna se tietokoneellesi. Kun olet asentanut Djangon tietokoneellesi, sinun tulee luoda sovellus ja malli tiedoillesi. Tässä on yksinkertainen malli, jonka voit kopioida:
alkaen django.db tuonti mallit
luokkaaLähettää(mallit. Malli):
otsikko = mallit. CharField (max_length=255)
tekijä = mallit. CharField (max_length=50)
sisältö = mallit. Tekstikenttä("Lähetä sisältö")
def__str__(itse):
palata itse.title
Yllä oleva malli on blogisovellukselle. Se määrittää jokaisen blogitekstin otsikon, kirjoittajan ja sisältökentät. Siinä on myös menetelmä, joka palauttaa viestin otsikon paremman käyttökokemuksen saamiseksi hallintapaneelissa.
Siirrä mallisi suorittamalla tämä komento:
python manage.py makemigrations && python manage.py migrate
Kun olet siirtänyt mallin, sinun tulee siirtyä kohtaan blogi> admin.py rekisteröidäksesi sen. Seuraava koodi rekisteröi onnistuneesti mallin nimeltä Lähettää.
alkaen django.contrib tuonti järjestelmänvalvoja
alkaen .malleja tuonti Lähettää # korvaa "Post" mallisi nimellä
admin.site.register (viesti)
Luo seuraavaksi superkäyttäjä ja lisää viestejä Django-hallintapaneelissasi. Luo superkäyttäjä käyttämällä tätä komentoa:
python manage.py createsuperuser
Yllä oleva komento vie sinut alla olevassa kuvassa esitetyn prosessin läpi:
Kun olet luonut superkäyttäjän, suorita kehityspalvelin ja siirry hallintapaneeliin.
python manage.py runserver
Kun palvelimesi käynnistyy, siirry kohtaan http://127.0.0.1:8000/admin, kirjaudu sisään ja lisää muutama viesti.
Luo seuraavaksi HTML-malli hahmontamaan viestisi selaimessa. Luo tiedosto seuraavaan hakemistoon: your_app/templates/your_app_name/index.html. Jos et ymmärrä mallien luomista, lue meidän johdantoopas Djangon MVT-arkkitehtuuriin.
Django-sivutus toimintopohjaisessa näkymässä
Djangon avulla voit rakentaa sovelluksia joko luokkapohjaisilla näkymillä tai funktiopohjaisilla näkymillä. Voit sivuuttaa sovelluksesi funktiopohjaisen näkymän avulla. Toimi seuraavasti:
- Avaa sinun views.py tiedosto ja tuo Sivuttaja luokkaa.
alkaen django.core.paginator tuonti Sivuttaja
- Luo näkymätoiminto HTML-mallissasi olevien viestien hahmontamiseksi.
alkaen django.shortcuts tuonti renderöi
alkaen .malleja tuonti Lähettää
alkaen django.core.paginator tuonti Sivuttaja
deflistanäkymä(pyyntö):
posts = Post.objects.all()
palata renderöi (pyyntö, 'blog/blog_list_view.html', {"viestit":posts})
- Luo URL-osoitemalli näyttääksesi viestisi selaimessa. Aloita määrittämällä URL-malli projektihakemistossasi. Avaa urls.py tiedosto projektitasolla ja lisää tämä tiedostoon url-mallit:
alkaen django.urls tuonti sisältää
urlpatterns = [
...,
polku ('', sisältää("blogi.urls")),
]
Korvaa yllä olevassa koodinpätkässä blogi sovelluksesi nimellä. Jos et pysty erottamaan projektia sovelluksesta, sinun pitäisi tietää miten projekti eroaa Djangon sovelluksesta.
Kun olet tehnyt yllä olevat asetukset, luo a urls.py tiedosto sovellushakemistossasi (tässä tapauksessa se on blogi kansio) ja lisää tämä koodinpätkä:
alkaen django.urls tuonti polku
alkaen .views tuonti listanäkymä
urlpatterns = [
polku ('', lista_näkymä, nimi='listanäkymä'),
]
Kun käytät palvelinta ja siirryt kohteeseen http://127.0.0.1:8000/, selain näyttää viestisi määrittämäsi tyylisivun mukaisesti.
- Muokkaa näkymätoimintoasi lisätäksesi sivutuslogiikkaa. Tässä on esimerkki:
deflistanäkymä(pyyntö):
posts = Post.objects.all()
sivutettu = Sivuttaja (viestit, 3)
sivun_numero = pyyntö. GET.get('sivu') #Hae pyydetty sivunumero URL-osoitteesta
sivu = sivutettu.get_sivu (sivun_numero)
palata renderöi (pyyntö, 'blog/blog_list_view.html', {'sivu':sivu})
Yllä oleva koodinpätkä sisältää kolme uutta muuttujaa: sivutettu, sivunumero, ja sivu. Jokainen muuttuja toimii seuraavasti:
- The sivutettu muuttuja alustettiin Sivuttaja luokkaa. Tässä skenaariossa sivutettava tieto on kyselyjoukko, viestit, ja se kestää 3 sivulla näytettävien kohteiden lukumääränä.
- The sivunumero muuttuja saa sivunumeron URL-osoitteesta. Esimerkiksi sisään http://127.0.0.1:8000/?page=2, sivunumero on 2.
- The sivu muuttuja hakee tietyn hahmonnettavan sivun sivutettu muuttuja.
Tähän mennessä Django on täytynyt sivuuttaa sivusi. Voit siirtyä tietyille sivutuille sivuille käyttämällä tässä kuvassa näkyvää URL-muotoa:
- Muokkaa HTML-malliasi näyttääksesi navigointiohjeet sivutuille sivuille. Käyttämällä julkaisussa olevia menetelmiä Sivuttaja luokan avulla voit luoda yksinkertaisen navigoinnin sivullesi. Tässä on esimerkki, jonka voit lisätä alkuperäisen HTML-koodisi alle:
{% if page.has_previous %}
<ahref="?page={{page.previous_page_number}}"
class="btn btn-secondary mx-NN">Edellinena>
{% loppu Jos %}<ahref="?page=1"luokkaa="btn btn-secondary">Ensimmäinena>
{% for num in page.paginator.page_range %}
{% if num == sivu.numero %}
<jänneväli>{{ numero }}jänneväli>
{% muuta %}
<ahref="?page={{num}}"luokkaa="btn btn-secondary mx-2">
{{ numero }}
a>
{% loppu Jos %}
{% endfor %}<ahref="?page={{page.paginator.num_pages}}"luokkaa="btn btn-secondary mx-2">
Kestää
a>
{% if page.has_next %}
<ahref="?page={{sivu.next_page_number}}"luokkaa="btn btn-secondary mx-2">
Seuraava
a>
{% loppu Jos %}
Yllä olevassa koodinpätkässä seuraavia menetelmiä käytetään ehdollisten lauseiden yhteydessä määrittämään, miltä sivutusnavigointi näyttää:
- has_previous: Tämä menetelmä palauttaa Totta jos sivutuissa tiedoissa on edellinen sivu.
- edellinen_sivu_numero: Tämä menetelmä palauttaa edellisen sivun arvon.
- sivualue: Tällä menetelmällä voit tietää, kuinka monta sivua sivutuissa tiedoissasi on.
- määrä: Tämä menetelmä palauttaa nykyisen sivun arvon.
- sivujen_määrä: Tämä menetelmä palauttaa sivujen kokonaismäärän.
- on_seuraava: Tämä funktio palauttaa Totta jos sivutuissa tiedoissa on seuraava sivu.
- seuraava_sivu_numero: Tämä menetelmä palauttaa seuraavan sivun arvon.
Django-sivutus luokkapohjaisessa näkymässä
Luokkapohjaisessa näkymässä sinun ei tarvitse tuoda ja alustaa Sivuttaja luokkaa. Voit ottaa sivutuksen käyttöön luokkapohjaisessa näkymässä määrittämällä attribuutin nimeltä sivut. Seuraa näitä ohjeita sivuuttaaksesi sovelluksesi luokkapohjaisella näkymällä:
- Kirjoita luokkapohjainen näkymä ja määritä sivut attribuutti. Tässä on yksinkertainen esimerkki:
alkaen .malleja tuonti Lähettää
alkaen django.views.generic tuonti Listanäkymä
luokkaaPostListView(Listanäkymä):
malli = Postitus
mallin_nimi = 'blog/blog_list_view.html'
konteksti_objektin_nimi = 'sivu'
sivutusperuste = 2
Yllä oleva näkymä on luokkapohjainen versio aiemmin kirjoitetusta funktiopohjaisesta näkymästä. Tämä näkemys perii Djangon Listanäkymä luokka, jota käytetään kohteiden luetteloimiseen. Se määrittelee logiikkansa attribuutilla, kuten malli, mallin_nimi, konteksti_objektin_nimi, ja sivut. The sivut attribuutti määrittää, kuinka monta viestiä sivulla näytetään; tässä tapauksessa 2 viestiä.
- Kun olet luonut näkymän, muokkaa sitä urls.py tiedostoa käyttääksesi sitä. Tässä on yksinkertainen esimerkki:
alkaen .views tuonti PostListView
urlpatterns = [
polku ('', PostListView.as_view(), nimi='listanäkymä'),
]
- Muokkaa HTML-malliasi käytettäväksi page_obj sivutusta varten.
{% if page_obj.has_previous %}
<ahref="?page={{page_obj.previous_page_number}}"
class="btn btn-secondary mx-NN">Edellinena>
{% loppu Jos %}<ahref="?page=1"luokkaa="btn btn-secondary">Ensimmäinena>
{% for num in page_obj.paginator.page_range %}
{% if num == page_obj.number %}
<jänneväliluokkaa="tämänhetkinen sivu">{{ numero }}jänneväli>
{% muuta %}
<ahref="?page={{num}}"luokkaa="btn btn-secondary mx-2">
{{ numero }}
a>
{% loppu Jos %}
{% endfor %}<ahref="?page={{page_obj.paginator.num_pages}}"
class="btn btn-secondary mx-NN">
Kestää
a>
{% if page.has_next %}
<ahref="?page={{page_obj.next_page_number}}"
class="btn btn-secondary mx-NN">
Seuraava
a>
{% loppu Jos %}
Toisin kuin funktiopohjaisen näkymän HTML-malli, tämä malli käyttää page_obj sijasta sivu edustamaan sivuobjektia. Tämä on Djangon luokkapohjaisen sivutuksen oletuskäyttäytyminen.
Käytä sivutusta tehdäksesi sovelluksestasi skaalautuvan
Sivutus vähentää palvelimen/tietokannan kuormitusta hakemalla ja näyttämällä pienempiä datan osajoukkoja kerrallaan. Sivuttamisen myötä verkkosivustojesi suorituskyky paranee. Käyttäjilläsi on myös hyvä kokemus sovelluksesi käytöstä.
Luokkapohjaiset näkymät säästävät enemmän aikaa ja koodia verrattuna toimintopohjaisiin näkymiin, mutta voit käyttää kumpaa tahansa mieltymystesi ja projektin spesifikaatioiden mukaan.