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

CherryPy окружење за веб развој

Аутор: Ромео Млинар

У данашњем свету web-а цене хостинга су све повољније, а могућности за развој бројније. За уобичајене врсте сајтова, попут блога, е-трговине или презентације, постоји много готових решења. Међутим, уколико се одлучите да направите наменски пројекат, вероватно га нећете писати „од нуле“, већ ћете одабрати један од бројних framework-а, односно окружења за развој. Овај текст укратко описује, уз минималне примере, једно такво окружење – CherryPy (CP).

CherryPy је framework створен у програмском језику Python, а исти језик користи се и за писање web програма (сајтова) у овом окружењу. Реч је о објектно-орјентисаном систему за брзи развој, уз релативно високу изложеност low-level елементима HTTP протокола. Ово је једна од значајнијих разлика између CP-a и сличних минималистичких webdev окружења.

CP сајтови покрећу се као самостални програми на серверу, на одређеном порту. Окружење садржи сопствени сервер, имплементиран у Python-у, тако да је сајт одмах спреман за рад. Међутим, многи сајтови CP покрећу у комбинацији са Nginx сервером: овако подешен CP програм ради у позадини на серверу прихватајући само локалне захтеве који стижу посредно (proxy) преко Nginx-a.

Приказаћемо како направити једноставан web програм у CP-у. Ми смо користили окружење за Python 3, инсталирано путем distribute модула.

Ово је пример преузет са званичног сајта. Кôд показује модел рада CP-а. Програм, односно сајт, садржан је у главној класи HelloWorld. Методи класе доступни су преко URL али само ако су експлицитно подешени као „изложени“ (овде: index.exposed = True). Уколико сачувамо пример и покренемо га у конзоли помоћу команде python3 primer.py, можемо учитати страницу са сервера у локалу, на адреси: http://localhost:8080.

CP једноставно преноси адресу из прегледача на методе класе. Погледајмо други пример у којем смо додали страницу „page“ (заправо, „мапирали“ смо део адресе на динамички захтеван садржај – резултат захтева странице „page“ може се налазити било где). Из дефиниције метода видимо да прихвата аргумент pagetitle који CP аутоматски убацује на основу адресе. Тако ће http://localhost:8080/page/one парсирати страницу са текстом „You just loaded page one!“. Међутим, ако затражимо од сервера страницу са адресе http://localhost:8080/page/one/foo добићемо поруку да страница није нађена (грешка 401). Уколико је CP подешен да приказује грешке (стандардно подешавање у току развоја програма), видећемо да Python пријављује „пуцање“ у методу .page, захтевајући присуство само једног аргумента (pagetitle).

CP је релативно једноставно окружење за web развој тако да је на програмеру одлука како да имплементира механизам за шаблоне (templating engine), кеширање, статичке датотеке или RSS доводе на свом сајту. Нека од решења које CP користи налазе се у Python библиотекама, попут cookie модула.

У готовом сајту имали бисмо конфигурацијску датотеку са разним параметрима који детаљније подешавају рад сервера. На пример, могли бисмо променити порт на којем апликација очекује захтеве, укључити посреднички начин рада (proxy) и тако добијати исправна заглавља од главног, изложеног сервера (frontend). Иста датотека садржала би и листу статичких датотека или посебно дефинисано MIME заглавље. Уз све то, читав сајт би се могао покретати у daemon режиму, уместо тест примера из конзоле који користимо у овом тексту.

Из овога видимо да је развој у CherryPy једноставан и директан. Међутим, због одсуства већих целина које имају друга окружења (cache, template, session management …) програме у овом окружењу треба пажљиво осмислити, па тако верујемо да ће овај framework одговарати програмерима који траже велику флексибилност у развоју. Наравно, погодан је и свим почетницима као увод у web развој, који ће после умети да цене све предности које нуде, на пример, Django или Pyramid.

У једном од наредних текстова надовезаћемо се на овај текст и показати како се користе Jinja2 шаблони.

Корисни линкови:

[1] http://www.cherrypy.org/
[2] http://pypi.python.org/pypi/distribute/