utorak, 16 aprila, 2024
Sam svoj majstor

Django framework

Autor: Nikola Hardi

U trećem i četvrtom broju bilo je reči o web programiranju i Python-u, a Django je jedan od najpoznatijih projekata na tom polju (pored cherypy i flask). Django je nastao kao skup priručnih alata programera koji su radili na sajtu novinske agencije. Kako osnivači ovog projekta kažu, u takvom okruženju nekada prođe svega nekoliko sati od ideje za aplikaciju do njenog puštanja u upotrebu. Upravo zbog toga uz Django idu i brz razvoj, izbegavanje ponavljanja kôda i automatizacija.

Delovi

Django framework se sastoji iz nekoliko glavnih celina, a postupak pravljenja sajta, odnosno Django aplikacije, sastoji se iz definisanja modela, šablona i adresa. Osim tih delova, bitno je spomenuti i server za razvoj i testiranje (engl. runserver) i ugrađeni administratorski deo sajta.

ORM

Postupak formiranja aplikacije najčešće počinje definisanjem modela, tj. opisivanjem podataka klasama. To su redovne klase iz paradigme objektno-orijentisanog programiranja, pisane u Python sintaksi. Kao i bilo koja druga klasa, jedan model ima svoje podatke i metode za rukovanje tim podacima. Po definisanju modela Django ORM (Object Relational Mapping), Django kreira odgovarajuće tabele u bazi podataka gde se čuvaju uneti podaci.

Django ORM podržava rad sa raznim bazama podataka, pre svega sqlite, postgresql, MySQL i Oracle DB, a postoje i dodaci za rukovanje drugim bazama podataka. Sqlite je vrlo zanimljiv izbor za razvoj i testiranje jer nije potreban server, već je cela baza smeštena u jednu datoteku, kojom rukovodi upravljački program na uobičajen način.

Posebna pogodnost ogleda se u tome, što je Django ORM moguće zameniti drugim alatima poput sqlalchemy koji je posebna priča, takođe vrlo zanimljiva. Od dodatnih alata zgodno je spomenuti i South, Django aplikaciju koja olakšava upravljanje migracijama. Osim selidbe podataka iz jedne baze podataka u drugu, South se koristi i za izmenu struktura. Inače, struktura jednom definisanog modela ne može se jednostavno izmeniti. Na primer, ako za model jednog članka na blogu napravimo polje „datum” i želimo da osim datuma čuvamo i vreme objavljivanja članka, možemo pomoću South-a dodati polje „vreme objavljivanja članka”.

Django ORM stiže sa dosta predefinisanih polja za čuvanje podataka pa su među njima: polje za unos jedne linije teksta, više linija teksta, postavljanje slika, unos brojeva, e-mail adresa, datuma, vremena, IP adresa, internet adresa… Django ispravlja unete podatke, na primer neka-adresa@internet nije validna e-mail adresa, dok neka-adresa@server.com jeste.

Template engine

Po definisanju modela podataka kojima jedna Django aplikacija upravlja, treba obezbediti način za predstavljanje tih podataka korisniku aplikacije. Django stiže sa kompletnim jezikom za opisivanje šablona, koji je vrlo moćan, a postoje i razne mogućnosti za nadogradnju. Neke od najvažnijih osobina vrednih spomena su: nasleđivanje i ugnježđivanje šablona, naredbe ciklusa i grananja, filteri za definisanje prikaza pojedinih podataka (format za ispis datuma, na primer) itd.

Osim prethodno navedenih primera template tag-ova (oznaka šablona) postoje i tag-ovi za pristup podacima koji su prosleđeni jednom šablonu. Na primer, ako prosledimo listu svih članaka na blogu za izabran mesec, možemo potom pristupiti naslovu svakog od članaka iz te liste, datumu objavljivanja, sažetku članka, samom tekstu ili svemu definisanom u modelu koji opisuje jedan članak.

U šablone se mogu svrstati i formulari. Django omogućava kreiranje html obrazaca (html forms) na osnovu već postojećih modela i njihovo prikazivanje u šablonima na vrlo fleksibilan način. Možemo prikazati šablon onako kako ga je Django pripremio, ili ga rasparčati i prikazati svaki njegov deo posebno. Formulari su bezbedni, što se tiče napada poput: sql injection, local file inclusion, remote file inclusion i cross site scripting.

Pošto je Django zamišljen i pisan kao modularan framework, Django template engine moguće je zameniti i nekim drugim, kao što je na primer Jinja. Django programeri u šali kažu da svaki Python programer u nekom trenutku odluči da mu nijedan jezik za opisivanje šablona nije dobar i napravi sebi novi, a to je takođe moguće, kao što je moguće i proširiti bilo koji od postojećih.

Pravljenje šablona može da teče sledećim tokom: Napisati jedan glavni šablon koji sadrži osnovu html stranice i u njemu definisati blokove na mestima gde želimo zaglavlje, meni i glavni deo stranice, a zatim napisati pojedinačne delove za svaki od tih blokova. Posle toga se dopišu šabloni koji učitavaju osnovu i željene blokove te je sajt skoro spreman.

URL mapper

Kada su modeli podataka i šabloni za prikaz spremni, potrebno ih je nekako povezati. Svaka Django aplikacija ima listu adresa u vidu regularnih izraza (regular expression) koje su povezane sa funkcijama za prikaz (views). Ideja je da korisnik upiše željenu adresu ili je izabere putem linka, URL mapper proverava regularne izraze i poziva odgovarajuću funkciju za prikaz, a usput prosleđuje i parametre koji mogu biti sadržani u samoj adresi, kolačićima (cookies) itd. Funkcija prihvata parametre, obrađuje podatke i obavi potrebno, te vraća povratnu vrednost. Povratna vrednost je uglavnom html sadržaj. Što se povratne vrednosti tiče, ona može biti ručno napisana, generisana u telu pozvane funkcije ili generisana na osnovu željenog šablona i prosleđenih podataka. Jedan primer bio bi, da za adresu „/blog/mesec/2” funkcija od baze zatraži sve članke za drugi mesec i prosledi ih funkciji koja će na osnovu liste tih članaka i izabranog šablona sve to spakovati u jednu html stranicu i vratiti kao povratnu vrednost koju korisnik vidi u web pregledaču.

Runserver

Za razvoj Django aplikacija na računaru programeri najčešće koriste takozvani runserver – mali server napisan u Python-u koji služi pre svega za testiranje aplikacija i strogo se savetuje da se ne koristi u produkciji. Zanimljivo je to, što je vrlo „lagan” po pitanju resursa, a takođe prati stanje svih datoteka u projektu i pri promeni nekih od bitnih datoteka on se sam restartuje.

Kada je vreme za puštanje Django projekta u rad, to je moguće učiniti na razne načine. Uz svaki Django projekat stiže i uWSGI skripta. uWSGI je web server napisan u Python-u koji može da pokreće ovakve aplikacije i u kombinaciji sa nekim drugim serverom koji bi poslužio kao proxy (nginx na primer), radi vrlo dobar posao. Django „se dobro slaže” i sa Apache mod_wsgi, mod_python, FastCGI, Gunicorn i ostalim poznatim rešenjima za pokretanje ovakvih aplikacija.

Administratorski pristup sajtu

Najmoćniji i vrlo praktični deo Django framework-a je ugrađeni administratorski interfejs, pa je tako bez većih problema administratorima jednog Django sajta omogućeno da unose nove podatke i menjaju već unete, za bilo koji model. Upravljanje korisnicima je nešto što podrazumevano stiže uz svaki Django projekat – dakle, dodavanje novih korisnika vrši se u nekoliko klikova. Postoji i upravljanje privilegijama pa je tako moguće određenim članovima dozvoliti pristup samo nekim delovima administratorskog interfejsa.

Aplikacije i modularnost

Jedan Django projekat sastoji se iz više aplikacija od kojih svaka uglavnom ima svoje modele, šablone, stilove (css), URL mape, funkcije za prikaz i testove. To znači da jedan sajt, koji se sastoji iz bloga, galerije, foruma i nekog četvrtog dela, zapravo ima četiri posebne aplikacije koje su zajedno povezane u Django projekat. U ovakvoj situaciji postavlja se pitanje modularnosti, to jest, mogu li neke aplikacije da se koriste u više projekata? Odgovor je potvrdan. Dobro napisana Django aplikacija može biti uključena i u neki drugi Django projekat. Aplikacije mogu biti različitog tipa, kao što su već pomenuti South i administratorski interfejs. Osim ovakvih aplikacija, to mogu biti i kompletan blog ili galerija. Sledi još nekoliko vrlo zanimljivih primera.

Fabric

Fabric je pomoćni alat za izvršavanje naredbi na lokalnom ili udaljenom sistemu putem SSH (secure shell) protokola. Ovim korisnim alatom možemo napisati skripte za pravljenje rezervne kopije, postavljanje sajta u režim održavanja, dodavanje novih sveže iskodiranih mogućnosti i još mnogo toga.

Piston, TastyPie, RESTFul API

Piston i ostale njemu slične aplikacije omogućavaju jednom Django projektu brzo i jednostavno pisanje takozvanog REST API-ja. Ukratko rečeno, REST API omogućava poseban kanal za komunikaciju sa jednom web aplikacijom ili sajtom koji može da posluži za upravljanje sajtom pomoću aplikacije na mobilnom telefonu, ili klijent programom na redovnom računaru.

Taggit, Photologue, Django CMS

Postoji mnogo aplikacija koje su zapravo već gotovi delovi za sajt. Taggit, jedna od njih, dodaje mogućnost za tzv. tag-ove (oznake) na blogu. Photologue je kompletna galerija, a Django CMS (content managament system) je ceo CMS spreman za produkciju.

Primer projekta

Sledi primer postupka jednostavnog Django projekta bez pravljenja posebnih aplikacija, sa jednim modelom, šablonom i sqlite bazom uz upotrebu automatskog administratorskog interfejsa.

[code]
1. Instalacija potrebnih paketa
sudo apt-get install python-django python-sqlite
2. Kreiranje i podešavanje projekta
django-admin startproject test_sajt
cd test_sajt
gedit test_sajt/settings.py &
3. Izmeniti sledeće linije
– Ukloniti znak # ispred linije sa spiskom administratora ADMINS,
– U formatu (obratite pažnju na zapetu na kraju): (//’Ime Prezime’,
‘neka@adresa.com//’),
– Linija za izbor baze podataka: ‘django.db.backends.sqlite3’,
– Ukloniti znak # ispred ‘django.contrib.admin’ i
‘django.contrib.admindocs’ za uključivanje administratorskog
interfejsa.
4. Kreiranje nove aplikacije
./manage.py startapp vicevi
5. Definisanje modela
[/code]