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.