Django Jatkoa

Teknologiademo 2 (Django ja MTV)

Jatkoa edellisestä teknologiademosta. Ennen tätä demoa tulisi jokaisella olla Python asennettuna ja Django-kehitysympäristö kunnossa. Mikäli ei ole, kysykää apua Slackissa. Todennäköisesti ette ole ongelmanne kanssa yksin, vaan joku muu on kamppailut ratkaisun kanssa.

Huom. esimerkeissä käytetty py-komentoa, jota käytetään Pythonin kutsumiseen. Tämä voi erota riippuen versiosta tai käyttöjärjestelmästä. Macissä komento on python3.

Ensimmäisen Django-projektin aloittaminen

Projektihakemiston lisääminen Atomissa tapahtuu File -> Add Project Folder…, jonka jälkeen kaikki Djangon tiedostot, jotka luotiin automaattisesti ensimmäisen startproject-komennolla, näkyvät Atomin puunäkymässä. Seuraavat tiedostot pitäisi näkyä

  • _ _ init _ _ .py
    • Kertoo Pythonille, että kyseessä on Python-paketti
  • settings.py
    • Sisältää projektikohtaiset asetukset, joita tullaan muuttamaan mieleiseksi
  • urls.py
    • Sisältää kaikki URL-tunnisteet (eroaa SPA-toteutuksissa), joita Django voi käsitellä
  • wsgi.py
  • db.sqlite3
    • Django ehdottaa vakiona SQLiten käyttämistä tietokantateknologiana, myös muut kuten PostgreSQL toimii hyvin Djangon kanssa
  • manage.py
    • Tarvitaan mm. projektin ajamiseen web-toteutukseksi komennolla py manage.py runserver

Applikaation lisääminen

Djangon applikaatio tarkoittaa yhden toiminnallisuuden lisäämistä koko web-toteutukseen (Huom. Django application != web application). Django-applikaation lisääminen onnistuu projektihakemiston sisällä komennolla

py manage.py startapp applikaation_nimi

Tuloksena syntyy uusi hakemisto, jonka sisällä on mm. seuraavat tiedostot models.py ja views.py, joihin palataan myöhemmin.

Django-applikaation linkittäminen projektiin tapahtuu settings.py -tiedostossa, missä ALLOWED_HOSTS -kohtaan pitää lisätä kyseinen applikaatio.

Mikäli komentorivi ilmoittaa seuraavan tekstin You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s):, pääsee siitä eroon komentorivin komennolla

py manage.py migrate

MVC Djangossa

MVC tulee sanoista Model, View, Controller. MVC on ajatusmalli, jonka taakse käytännössä kaikki web-teknologia pohjautuu. MVC:n tarkoituksena on luoda rakenne web-sovellusten kehittämiseen, jossa voidaan käyttää valmiita rakenteita useasti, eikä web-sovelluksia tarvitse “kovakoodata” (engl. termi DRY, Don’t repeat yourself). Lyhykäisyydessään

  • Model mallintaa, miten tietokanta kommunikoi palvelimen kanssa. Esimerkiksi tietokanta pitää kirjaa, mistä tietokantataulusta löytyy adminit
  • View näyttää halutun sisällön tallennettujen “kehyksien” mukaisesti (HTML/CSS!)
  • Controller pitää huolen siitä, mitä käyttäjälle näytetään sekä esimerkiksi antaa valtuuksia admineille muuttaa web-sovelluksen sisältöä

MVC:n ajatusmalli perustuu siihen, että web-sovellukset kulku menee lähes aina niin, että käyttäjä kertoo palvelimelle mitä haluaa, palvelin hakee tietokannasta tarvittavat tiedot ja näyttää ne käyttäjälle sopivassa muodossa.

Django käyttää samaa ajatusmallia, mutta käyttää termeinään MTV, Model, Template, View. Lisätietoa runsaasti netissä ja esimerkiksi täällä. Hyviä Youtube-videoita mm. täällä ja täällä.

Demo Djangon MTV:stä

MTV-mallin rakentaminen tapahtuu Djangossa päinvastaisessa järjestyksessä; ensin luodaan templatet, joita näytetään käyttäjälle, sitten luodaan viewt, joissa tapahtuu web-sovelluksen logiikka, ja lopuksi modelit, joihin kytketään tietokannat. Tässä nopeassa demossa ei vielä tietokantaa kytketä Djangoon.

Templatet lisätään settings.py-tiedostossa. Kohdassa TEMPLATES tulee olla kirjoitettu seuraavasti:

'DIRS': [os.path.join(BASE_DIR, "templates"),],

Tällöin Django hakee projektin_nimi/templates/-hakemistosta kaikki templatet.

Seuraavaksi luodaan templates-hakemisto, johon lisätään .html-tiedosto. Sisällön tuominen Djangosta .html-tiedostoon tapahtuu lisäämällä kenttä __, jolloin Djangon views.py tietää, mihin sen tuoma sisältö kiinnitetään. Views.py-tiedostossa sisällön luominen tapahtuu esimerkiksi seuraavasti:

from django.shortcuts import render
from django.http import HttpResponse

def index(request):
  eka_dict = {'sisalto': "Tämä on tekstiä views.py:stä!"}
  return render(request, 'testi_app/index.html', context=eka_dict)

Näin olet tehnyt ensimmäisen dynaamisen html-sivun!

Lopuksi: Ylläolevat, ja paljon enemmän löytyy vieläkin Djangon omasta dokumentaatiosta. Lisäksi muita erityisen hyviä tutoriaaleja erityisesti vasta-alkajille ovat Django Girls Tutorial ja The Django Book.
Written on January 31, 2018