Web programiranje → Početak Django aplikacije → Struktura Django projekta


Struktura Django projekta i osnovna konfiguracija


Lekcija 10 od 21

Web početna:
Povratak na vodič | Sledeća lekcija: Views i URL routing


Uvod


U prethodnoj lekciji kreirao si prvi Django projekat i pokrenuo server.

Sada ćemo razumeti kako projekat zaista funkcioniše “iznutra”.

Cilj lekcije:

Da razumeš strukturu Django projekta i osnovna podešavanja koja su potrebna za razvoj aplikacije.

Struktura Django projekta


Kada kreiraš projekat, dobijaš sledeću strukturu:


ime_projekta/
   manage.py
   ime_projekta/
      __init__.py
      settings.py
      urls.py
      wsgi.py

Primer:


logo_kreator/
   manage.py
   logo_kreator/
      __init__.py
      settings.py
      urls.py
      wsgi.py
Tip:

Unutrašnji folder ima isti naziv kao projekat — tu se nalazi glavna konfiguracija.

Šta rade ovi fajlovi?


  • manage.py — upravljanje projektom (komande)
  • settings.py — konfiguracija aplikacije
  • urls.py — routing (linkovi)
  • wsgi.py — pokretanje aplikacije na serveru

settings.py — najvažniji fajl


Ovo je centralno mesto gde se podešava Django projekat.

Ovde se definišu:

  • baza podataka
  • instalirane aplikacije
  • debug mod

Podešavanje baze podataka


Django po default-u koristi SQLite:


DATABASES = {
 'default': {
  'ENGINE': 'django.db.backends.sqlite3',
  'NAME': 'database.sqlite3',
 }
}

Za PostgreSQL koristimo:


DATABASES = {
 'default': {
  'ENGINE': 'django.db.backends.postgresql_psycopg2',
  'NAME': 'database',
  'USER': 'postgres',
  'PASSWORD': '*******',
  'HOST': 'localhost',
  'PORT': '5432',
 }
}
Važno:

SQLite je dobar za razvoj, dok se PostgreSQL koristi u produkciji.

Debug mod



DEBUG = True

Dok razvijaš aplikaciju, debug treba biti uključen.

Važno:

U produkciji DEBUG mora biti isključen (False).

requirements.txt


Ovaj fajl sadrži listu svih potrebnih paketa.


pip freeze > requirements.txt

Omogućava lako pokretanje projekta na drugom računaru ili serveru.


Procfile (za deployment)


Procfile definiše kako se aplikacija pokreće na serveru:


web: gunicorn logo_kreator.wsgi --log-file -

Tip:

Ovo je obavezno za platforme kao što je Heroku.

Kreiranje aplikacije unutar projekta


Django projekat može imati više aplikacija.


python manage.py startapp naslovna

Struktura aplikacije:


naslovna/
   __init__.py
   admin.py
   models.py
   views.py
   tests.py

Dodavanje aplikacije u projekat


Nakon kreiranja, aplikaciju treba registrovati:


INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'naslovna'
]

Bez ovoga Django neće prepoznati aplikaciju.


Eksperiment:

1. Kreiraj novu aplikaciju 2. Dodaj je u INSTALLED_APPS 3. Pokreni server
Posmatraj da li aplikacija radi bez greške.

Priprema za deployment (Git i Heroku)


Kada razvijemo aplikaciju lokalno, sledeći korak je da je postavimo na internet.

Za to koristimo:

  • Git — za verzionisanje koda
  • Heroku — platformu za pokretanje aplikacije
Važno:

Deployment znači da aplikacija postaje dostupna svima putem interneta.

Git — čuvanje i verzionisanje koda

Git omogućava da pratimo promene u projektu i lako ga postavimo na server.


git init
git add .
git commit -m "Prva verzija projekta"
Tip:

Git je standard u svim profesionalnim projektima.

Heroku — pokretanje aplikacije

Heroku je platforma koja omogućava da pokreneš Django aplikaciju online.

On automatski:

  • instalira pakete
  • pokreće server
  • hostuje aplikaciju

requirements.txt

Ovaj fajl sadrži listu svih Python paketa:


pip freeze > requirements.txt

Procfile

Definiše kako se aplikacija pokreće:


web: gunicorn logo_kreator.wsgi --log-file -

Razmisli:

Zašto je važno da projekat može da se pokrene na drugom računaru bez dodatnog podešavanja?

Zaključak


  • razumeš strukturu projekta
  • znaš šta radi settings.py
  • znaš kako se dodaje aplikacija
  • razumeš osnovu deploy-a

Šta sledi?

  • views.py — logika aplikacije
  • urls.py — povezivanje ruta
  • prva prava stranica

KREIRANJE DJANGO WEB APLIKACIJE- HEROKU PLATFORMA NASTAVAK


Kreiranje Procfile

​U okviru root foldera potrebno je kreirati Procfile(tip File) gde se definiše komanda koja se pokreće da bi se startovala aplikacija:
web: gunicorn logo_kreator.wsgi --log-file -
To je sadržano u fajlu. Ovim se definiše koja će se komanda pokrenuti kad se startuje server
Django web aplikacija-Proc file
Slika 1: Django web aplikacija-Proc file

Kreiranje static fajlova

Static fajlovi su dodatni fajlovi koji se koriste u projektu, kao što su slike, css, javascript fajlovi. Folder static se obično stavlja u root projekta. U settings.py mora se podesiti putanja do foldera STATIC_ROOT i url, koji je obično /static/ , ali može se definisati i drugačije pomoću STATIC_URL . 
Static fajlovi će se kopirati na lokaciju definisanu sa STATIC_ROOT, posle komande python manage.py collectstatic u command promptu. Static fajlovi se na kokalu pre toga cuvaju u direktorijumu koji se definiše sa

STATICFILES_DIRS=[(os.path.join(BASE_DIR,'assets'))] u okviru settings.py
​

Ovaj direktorijum ne sme biti isti sa STATIC_ROOT. Obično se ostavi da assets bude prazan na početku
Unutar settings.py:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
STATIC_URL = '/static/'
STATICFILES_DIRS=[(os.path.join(BASE_DIR,'assets'))]
​Unutar templejt html fajlova ov se mora uključiti. Na početku base.html fajla uključićemo static fajlove:
{% load static %}

​Ažuriranje izmena 

Svaki put kada se napravi izmena na lokalnom računaru, te promene se neće automatski ažurirati i na web serveru. Da bi se ažurirale komande potrebno je prvo pripremiti fajlove i foldere za slanje. Prethodno, ako već niste ulogovani na vaš Heroku nalog, to treba uraditi komandom:
$ heroku login
​a zatim:
$ git add .
​Zatim uraditi potvrdu(commit) sa opisom izmene, ako se želi:
$ git commit -m "Opis promena"
I na kraju pokrenuti ažuriranje pozivom komande push. Ukoliko se želi ažurirati u obrnutom smeru, onda bi se umesto push izvršila pull komanda.
$ git push heroku master
​Posle ostvarenih promena može se startovati webserver:
$ heroku open
​Posle pokretanja pojaviće se sledeća greška:
Django web aplikacija-Greška: DisallowedHost
Slika 2: Django web aplikacija-Greška: DisallowedHost
​Vidi se da nedostaju dozvole za pristup domenu. Potrebno je dodati dopuštene hostove unutar settings.py fajla:
Django web aplikacija-Dodavanje dopuštenih hostova
Slika 3: Django web aplikacija-Dodavanje dopuštenih hostova
​Adresu websajta je dodata u listu pod nazivom ALLOWED_HOST.
Posle ponovnog izvršenja komande push i pokretanja aplikacije na web serveru prikazaće se strana:
Django web aplikacija-Greška na serveru-heroku logs --tail
Slika 4: Django web aplikacija-Greška na serveru-heroku logs --tail
​Opis greške možemo dobiti ako u command prompz-u otkucamo naredbu:
$ heroku logs --tail
Do greške dolazijer na heroku webserveru nije podešena i  ažurirana baza podataka tako da ima iste one podatke koji su kreirani kada se aplikacija razvijala na localhost-u.
U meniju treba odabrati stavku data(vidi sliku ), da bi upravljali bazama na heroku platformi:
Heroku platforma-baza postgresql-kartica Datastories
Slika 5: Heroku platforma-baza postgresql-kartica Datastories
​Postgre baza je dodeljena kreiranoj aplikaciji. klikom na nju i izborom kartice settings, može se podesiti baza podataka, odnosno definisati: naziv, šifra, korisnik za bazu, host itd:
Heroku platforma-baza postgresql-kartica settings
Slika 6: Heroku platforma-baza postgresql-kartica settings
Baza je kreirana u oblaku, npr. sajtu amazon, automatski i parametri se mogu videti klikom na dugme ” View Credentials”. Heroku platforma-baza postgresql-Database Credentials
Slika 7: Heroku platforma-baza postgresql-Database Credentials
​Ove parametre treba prekopirati u settings fajlu, umesto parametra za localhost:
Django-podešavanja baze postgresql-settings.py
Slika 8: Django-podešavanja baze postgresql-settings.py
​Treba napomenuti da ovi parametri za bazu mogu ostati i kada se dalje bude razvijala aplikacija na localhost-u, u suprotnom se lokalna baza mora svaki put ažurirati i uskladiti sa promenama u bazi na webserveru.
Ako ponovo pokrenemo aplikaciju prikazaće se naslovna strana kao na slici:Django-Logo kreator-naslovna strana bez stila
Slika 9: Django-Logo kreator-naslovna strana bez stila
​Vidi se sa slike da baza nema izgled, onakakav kakav treba, kao da nedostaje veza sa css fajlom. U alatkama za programere, u chrome pretraživaču, može se videti sledeća greška:
Django-Logo kreator-naslovna strana-greška MIME
Slika 10: Django-Logo kreator-naslovna strana-greška MIME
Postoji problem sa static fajlovima na webserveru.
Dodaćemo sada plug-in whitenoice koji olakšava rad sa static fajlovima:
u command prompt-u:
$ pip install whitenoise
​To je aplikacija koja pomaže u kopiranju static fajlova.
Posle restartovanja servera i osvežavanja naslovne strane :
Slika 11: Django-Logo kreator-naslovna strana
Slika 11: Django-Logo kreator-naslovna strana