Esimene äpp

Django Projekt koosneb mitmetest äppidest. Lihtsa kodulehe puhul võib olla äppideks blogi, galerii, kontakt jne.

Äpp on oma olemuselt Pythoni pakk, me võiksime pakke ise teha, aga Django pakub meile võimalust teha äpp läbi konsooli.

Kirjuta konsooli:

python manage.py startapp news

Tekib uus kaust nimega news.

Lisaks tuleb uus äpp registreerida settings.py failis INSTALLED_APPS nimekirjas.

mysite/settings.py

...
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'news',  # add this line
]
...

Esimene mudel

Andmeid hoitakse andmebaasis. Andmebaase kirjeldatakse SQL keeles. Djangot kasutades ei pea me uut keelt õppima, vaid saame kirjeldada objekte Pythoni klassidena. Selliseid objekte kutsutakse andmemudeliteks. Django loob tehtud andmemudelite järgi sobiva andmebaasi.

Muudame faili mysite/news/models.py.

from django.db import models


class Reporter(models.Model):
    full_name = models.CharField(max_length=70)

    def __str__(self):
        return self.full_name


class Article(models.Model):
    pub_date = models.DateField()
    headline = models.CharField(max_length=200)
    content = models.TextField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

    def __str__(self):
        return self.headline

Mudel Reporter on väga lihtne mudel, omades vaid nime.

Mudel Article sisaldab loomiskuupäeva, pealkirja, sisu ning viidet artikli autorile.

Mudelite põhjal andmebaasi muutmiseks vajaliku koodi genereerimiseks jooksutame käsku.

python manage.py makemigrations polls

Kausta news/migrations/ tekkis uus fail 0001_initial.py, selles failis on kirjas, milliseid muudatusi tuleb andmebaasis teha, et meie mudeleid andmebaasi lisada.

Et tehtud muudatused ka andmebaasi jõuaksid, tuleb konsoolis jooksutada järgnevat käsku. python manage.py migrate

Selle sammuga otsitakse üles kõik failid */migrations/ kaustas ning tehakse andmebaasi vastavad muudatused.

Katsetused Pythoni interpretaatoriga

Interaktiivset kasutajaliidest (IDLE) kasutades on lihtne katsetada Django API-t andmebaasiga suhtluseks.

IDLE TL;DR: ava PyCharmis aken View -> Tool Windows -> Python Console ja kirjuta koodi.

Näited:

# Import the models we created from our "news" app
>>> from news.models import Article, Reporter

# No reporters are in the system yet.
>>> Reporter.objects.all()
<QuerySet []>

# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')

# Save the object into the database. You have to call save() explicitly.
>>> r.save()

# Now it has an ID.
>>> r.id
1

# Now the new reporter is in the database.
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>

# Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith'

# Django provides a rich database lookup API.
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>
>>> Reporter.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Reporter matching query does not exist.

# Create an article.
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
...     content='Yeah.', reporter=r)
>>> a.save()

# Now the article is in the database.
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]>

# Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith'

# And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]>

# The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>

# Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
>>> r.save()

# Delete an object with delete().
>>> r.delete()

Admin paneel

Kui mudelid on tehtud, saame me luua rakenduse jaoks admin lehekülje. Djangos on väga lihtne teha administraatorile paneeli - lehte, kus volitatud kasutajad saavad luua, muuta ja kustutada objekte.

Kirjutame news/admin.py faili sellise koodi:

from django.contrib import admin

from . import models

admin.site.register(models.Reporter)
admin.site.register(models.Article)

Et admin leheküljele ligi pääseda, peame me looma admin õigustega kasutaja.

Selleks vali PyCharmis Tools -> Run manage.py Task..., avanud konsooli kirjuta:

   createsuperuser

Jälgi juhendeid ekraanil.

Kui Run manage.py Task... menüüd ei saa avada, tuleb käsureale kirjutada

python manage.py createsuperuser

Peale kasutaja loomist saad admin paneelile ligi. http://127.0.0.1:8000/admin/

Selle lehe kaudu võib endale luua esialgset sisu.