петак, 26 априла, 2024
Сам свој мајстор

Django framework

Аутор: Никола Харди

У трећем и четвртом броју било је речи о web програмирању и Python-у, а Django је један од најпознатијих пројеката на том пољу (поред cherypy и flask). Django је настао као скуп приручних алата програмера који су радили на сајту новинске агенције. Како оснивачи овог пројекта кажу, у таквом окружењу некада прође свега неколико сати од идеје за апликацију до њеног пуштања у употребу. Управо због тога уз Django иду и брз развој, избегавање понављања кôда и аутоматизација.

Делови

Django framework се састоји из неколико главних целина, а поступак прављења сајта, односно Django aпликације, састоји се из дефинисања модела, шаблона и адреса. Осим тих делова, битно је споменути и сервер за развој и тестирање (енгл. runserver) и уграђени администраторски део сајта.

ORM

Поступак формирања апликације најчешће почиње дефинисањем модела, тј. описивањем података класама. То су редовне класе из парадигме објектно-оријентисаног програмирања, писане у Python синтакси. Као и било која друга класа, један модел има своје податке и методе за руковање тим подацима. По дефинисању модела Django ORM (Object Relational Mapping), Django креира одговарајуће табеле у бази података где се чувају унети подаци.

Django ORM подржава рад са разним базама података, пре свега sqlite, postgresql, MySQL и Oracle DB, а постоје и додаци за руковање другим базама података. Sqlite је врло занимљив избор за развој и тестирање јер није потребан сервер, већ је цела база смештена у једну датотеку, којом руководи управљачки програм на уобичајен начин.

Посебна погодност огледа се у томе, што је Django ORM могуће заменити другим алатима попут sqlalchemy који је посебна прича, такође врло занимљива. Од додатних алата згодно је споменути и South, Django апликацију која олакшава управљање миграцијама. Осим селидбе података из једне базе података у другу, South се користи и за измену структура. Иначе, структура једном дефинисаног модела не може се једноставно изменити. На пример, ако за модел једног чланка на блогу направимо поље „датум” и желимо да осим датума чувамо и време објављивања чланка, можемо помоћу South-а додати поље „време објављивања чланка”.

Django ORM стиже са доста предефинисаних поља за чување података па су међу њима: поље за унос једне линије текста, више линија текста, постављање слика, унос бројева, e-mail адреса, датума, времена, IP адреса, интернет адреса… Django исправља унете податке, на пример neka-adresa@internet није валидна e-mail адреса, док neka-adresa@server.com јесте.

Template engine

По дефинисању модела података којима једна Django апликација управља, треба обезбедити начин за представљање тих података кориснику апликације. Django стиже са комплетним језиком за описивање шаблона, који је врло моћан, а постоје и разне могућности за надоградњу. Неке од најважнијих особина вредних спомена су: наслеђивање и угњежђивање шаблона, наредбе циклуса и гранања, филтери за дефинисање приказа појединих података (формат за испис датума, на пример) итд.

Осим претходно наведених примера template tag-ова (ознака шаблона) постоје и tag-ови за приступ подацима који су прослеђени једном шаблону. На пример, ако проследимо листу свих чланака на блогу за изабран месец, можемо потом приступити наслову сваког од чланака из те листе, датуму објављивања, сажетку чланка, самом тексту или свему дефинисаном у моделу који описује један чланак.

У шаблоне се могу сврстати и формулари. Django омогућава креирање html образаца (html forms) на основу већ постојећих модела и њихово приказивање у шаблонима на врло флексибилан начин. Можемо приказати шаблон онако како га је Django припремио, или га распарчати и приказати сваки његов део посебно. Формулари су безбедни, што се тиче напада попут: sql injection, local file inclusion, remote file inclusion и cross site scripting.

Пошто је Django замишљен и писан као модуларан framework, Django template engine могуће је заменити и неким другим, као што је на пример Jinja. Django програмери у шали кажу да сваки Python програмер у неком тренутку одлучи да му ниједан језик за описивање шаблона није добар и направи себи нови, а то је такође могуће, као што је могуће и проширити било који од постојећих.

Прављење шаблона може да тече следећим током: Написати један главни шаблон који садржи основу html странице и у њему дефинисати блокове на местима где желимо заглавље, мени и главни део странице, а затим написати појединачне делове за сваки од тих блокова. После тога се допишу шаблони који учитавају основу и жељене блокове те је сајт скоро спреман.

URL mapper

Када су модели података и шаблони за приказ спремни, потребно их је некако повезати. Свака Django апликација има листу адреса у виду регуларних израза (regular expression) које су повезане са функцијама за приказ (views). Идеја је да корисник упише жељену адресу или је изабере путем линка, URL mapper проверава регуларне изразе и позива одговарајућу функцију за приказ, а успут прослеђује и параметре који могу бити садржани у самој адреси, колачићима (cookies) итд. Функција прихвата параметре, обрађује податке и обави потребно, те враћа повратну вредност. Повратна вредност је углавном html садржај. Што се повратне вредности тиче, она може бити ручно написана, генерисана у телу позване функције или генерисана на основу жељеног шаблона и прослеђених података. Један пример био би, да за адресу „/blog/mesec/2” функција од базе затражи све чланке за други месец и проследи их функцији која ће на основу листе тих чланака и изабраног шаблона све то спаковати у једну html страницу и вратити као повратну вредност коју корисник види у web прегледачу.

Runserver

За развој Django апликација на рачунару програмери најчешће користе такозвани runserver – мали сервер написан у Python-у који служи пре свега за тестирање апликација и строго се саветује да се не користи у продукцији. Занимљиво је то, што је врло „лаган” по питању ресурса, а такође прати стање свих датотека у пројекту и при промени неких од битних датотека он се сам рестартује.

Када је време за пуштање Django пројекта у рад, то је могуће учинити на разне начине. Уз сваки Django пројекат стиже и uWSGI скрипта. uWSGI је web сервер написан у Python-у који може да покреће овакве апликације и у комбинацији са неким другим сервером који би послужио као proxy (nginx на пример), ради врло добар посао. Django „се добро слаже” и са Apache mod_wsgi, mod_python, FastCGI, Gunicorn и осталим познатим решењима за покретање оваквих апликација.

Aдминистраторски приступ сајту

Најмоћнији и врло практични део Django framework-а је уграђени администраторски интерфејс, па је тако без већих проблема администраторима једног Django сајта омогућено да уносе нове податке и мењају већ унете, за било који модел. Управљање корисницима је нешто што подразумевано стиже уз сваки Django пројекат – дакле, додавање нових корисника врши се у неколико кликова. Постоји и управљање привилегијама па је тако могуће одређеним члановима дозволити приступ само неким деловима администраторског интерфејса.

Апликације и модуларност

Један Django пројекат састоји се из више апликација од којих свака углавном има своје моделе, шаблоне, стилове (css), URL мапе, функције за приказ и тестове. То значи да један сајт, који се састоји из блога, галерије, форума и неког четвртог дела, заправо има четири посебне апликације које су заједно повезане у Django пројекат. У оваквој ситуацији поставља се питање модуларности, то јест, могу ли неке апликације да се користе у више пројеката? Одговор је потврдан. Добро написана Django апликација може бити укључена и у неки други Django пројекат. Апликације могу бити различитог типа, као што су већ поменути South и администраторски интерфејс. Осим оваквих апликација, то могу бити и комплетан блог или галерија. Следи још неколико врло занимљивих примера.

Fabric

Fabric је помоћни алат за извршавање наредби на локалном или удаљеном систему путем SSH (secure shell) протокола. Овим корисним алатом можемо написати скрипте за прављење резервне копије, постављање сајта у режим одржавања, додавање нових свеже искодираних могућности и још много тога.

Piston, TastyPie, RESTFul API

Piston и остале њему сличне апликације омогућавају једном Django пројекту брзо и једноставно писање такозваног REST API-ја. Укратко речено, REST API омогућава посебан канал за комуникацију са једном web апликацијом или сајтом који може да послужи за управљање сајтом помоћу апликације на мобилном телефону, или клијент програмом на редовном рачунару.

Taggit, Photologue, Django CMS

Постоји много апликација које су заправо већ готови делови за сајт. Тaggit, једна од њих, додаје могућност за тзв. tag-ове (ознаке) на блогу. Photologue је комплетна галерија, а Django CMS (content managament system) је цео CMS спреман за продукцију.

Пример пројекта

Следи пример поступка једноставног Django пројекта без прављења посебних апликација, са једним моделом, шаблоном и sqlite базом уз употребу аутоматског администраторског интерфејса.

[code]
1. Инсталација потребних пакета
sudo apt-get install python-django python-sqlite
2. Креирање и подешавање пројекта
django-admin startproject test_sajt
cd test_sajt
gedit test_sajt/settings.py &
3. Изменити следеће линије
– Уклонити знак # iспред линије са списком администратора ADMINS,
– У формату (обратите пажњу на запету на крају): (//’Ime Prezime’,
‘neka@adresa.com//’),
– Линија за избор базе података: ‘django.db.backends.sqlite3’,
– Уклонити знак # испред ‘django.contrib.admin’ и
‘django.contrib.admindocs’ за укључивање администраторског
интерфејса.
4. Креирање нове апликације
./manage.py startapp vicevi
5. Дефинисање модела
[/code]