Web2py

Из Википедије, слободне енциклопедије
web2py
Првобитни
аутор(и)
Масимо ДиПијер
Прва верзија 27.09.2007.
Најновија
верзија
2.12.3[1]
18.08.2015.
Статус развоја Активно
Писано у Пајтон
ОС Cross-platform
Тип Фрејмворк Веб Апликације
Лиценца GNU Lesser General Public License верзија 3 (LGPLv3)
Веб-сајт www.web2py.com
mailing list

Web2py фрејмворк веб апликације отвореног кода написан у Пајтон програмском језику. Web2py allows дозвољава веб програмерима да програмирају динамични веб садржај коришћењем Пајтона. Web2py је дизајниран да помогне при смањењу тешких задатака развоја, као што је развој веб форми од нуле, иако би веб програмер направио форму од нуле да је то потребно.[2]

Web2py је оригинално дизајниран као алатка учења са акцентом на лакоћу коришћења и распоређивања. Према томе, нема ниједан конфигурациони фајл на нивоу пројекта. Дизајн web2py-а је инспирисан од стране Ruby on Rails и Django фрејмворкова. Као ови фрејмворкови, web2py се фокусира на рапидни развој, стављајући акценат на конвенцију преко конфигурације приступ и прати МВЦ архитектуру..

Преглед[уреди]

Web2py је фрејмворк пуног стека који има уграђене компоненте за све главне функције, укључујући:

  • HTTP захтеве, HTTP одговоре, колачиће, сесије;
  • вишеструке протоколе[3] HTML/XML, REST, ATOM и RSS, RTF, JSON, JSON-RPC и XML-RPC, (Flash/Flex), и SOAP;[4]
  • Create, read, update и delete АПИ;
  • вишеструке механизме аутентификације и контролу приступа базирану на редовима;
  • апстрактни слој базе података који динамично генерише SQL и покреће се на вишеструким компатибилним бек-енд базама података
  • RAM, disk, и memcached-базирано кеширање за скалирање;
  • интернационализацијска подршка;
  • jQuery за Ajax и ефекте корисничког интерфејса;
  • аутоматско чување грешака са контекстом.

Web2py подстише звучни инжењеринг софтверских пракси као што су

  • МВЦ образац;
  • само-подношење[5] веб форми;
  • сесије са серверске стране;
  • сигурно руковање постављених фајлова.

Web2py се користи WSGI протоколом, Пајтон-орјентисаним протоколом за комуникацију између веб сервера и веб апликација. Такође обезбеђује руководиоице за CGI и FastCGI протоколе, и садржи више-нитни, SSL-омогућени Rocket[6] wsgiserver.

Карактеристичне могућности[уреди]

Веб-базирано интегрисано развојно окружење[уреди]

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

Апликације такође могу бити направљене из интерфејса командне линије или програмирани из других интегрисаних развојних окружења.[7] Даље опције дебаговања:[8]

  • Wing IDE дозвољава графичко дебаговање web2py апликација[9] док интерагујете са њим кроз ваш веб прегледач, можете проверити и мењати променљиве, правити потпрограмске позиве итд.
  • Eclipse/PyDev — Eclipse са Aptana PyDev додатком — подржава web2py такође.[10][11]
  • Дебагер pdb који је могуће проширити је модул Пајтонове стандардне библиотеке.
  • Са платформски-независним дебагером отвореног кода Winpdb, особа може извршити даљинско дебаговање[12] преко TCP/IP, кроз кодирану конекцију.[13]

Hello World програм са web2py-ем у његовом најједноставнијем облику (једноставна веб страница[14] без шаблона) изгледа овако:

def hello():
    return 'Hello World'

Web2py укључује језик шаблонирања базираног на Пајтону, без захтевања увлачења и моделом објектног документа са серверске стране (DOM).

Систем шаблона ради без web2py-а.[15] Joomla 1.x шаблони могу бити конвертовани у web2py пројекте.[16]

Web2py такође укључује две библиотеке: markdown2 текст-до-HTML филтер, који конвертује Markdown маркауп до HTML-а у току покретања; и markmin који је инспирисан markdown-ом али подржава табеле, html5 видео/звучни и уграђени проткол.

Контролор без аутоматског прегледа користи генерични преглед који обрађује променљиве враћене од контролора, омогућавајући развој логике пословних апликација пре писања HTML-а. "Hello World" пример коришћењем подразумеваног шаблона:

def hello():
    return dict(greeting='Hello World')

Излаз dict() акције је аутоматски обрађен у HTML-у ако је страница затражена са .html екстензијом, у JSON ако је страница затражена у .json екстензији, у XML-у ако је затражена са .xml. Подржава друге протоколе укључујући jsonp, rss, ics, google maps, итд. и могуће је проширити је. Ево га више комплексан пример кода који дефинише табелу, и разоткрива решетку улогованим корисницима:

db.define_table('thing',Field('name',notnull=True))

@auth.requires_login()
def hello():
    return dict(grid = SQLFORM.grid(db.thing))

Систем тикетирања[уреди]

Свака web2py апликација долази са системом тикетирања:

  • Ако се догоди грешка, сачувана је и тикет је приказан кориснику. То омогућава праћење грешки.
  • Грешке и изворни кодови су доступни само администраторима, који могу претраживати и преузимати грешке по датуму или интернет адресе клијента. Ниједна грешка не може резултовати приказивањем кода корисницима.

Преносиви крон[уреди]

Крон је механизам за прављење и покретање понављајућих задатака у позадини. Претражује crontab фајл специфичног за апликацију кои је сандардни crontab формат. Три мода операција су доступна:

  • Меки крон: крон рутине су проверене после приказивања садржаја веб странице, не гарантује прецизност извшења. За непривилиговане Apache CGI/WSGI инсталације.
  • Тврди крон: нит крона почиње приликом покретања web2py-а. За Windows и Rocket/самосталне web2py инсталације.
  • Системски крон: крон потпрограми бивају принудно позвани из интерфејса командне линије, обично из системског crontab-а. За Unix/Linux системе где крон мора бити извршен иако web2py није покренут у том тренутку; такође добро за CGI/WSGI инсталације ако имате приступ системском crontab-у.

Заказивач задатака[уреди]

Од верзије 2.3 коришћење крона је обесхрабрено откад web2py долази са шефовским/радничким заказивачем задатака. Послови могу бити дефинисани у моделима и заказивани су прављењем податка у бази података. Корисници могу започети процесе који купе и извршавају задатке у позадини. Распоред је бољи него крон зато што дозвољава да се дефинишу више параметара (време покретања, време престанка, број понављања, број суђења у случају грешке) и ради бољи посао приликом покретања са константним коришћењем извора.

Bytecode дистрибуција[уреди]

Web2py може да компајлује веб апликације за дистрибуцију у bytecode компајлованој форми, без изворног кода. Насупрот фрејмворковима који користе специјализоване језике за своје прегледе, Web2py може такође компајловати прегледајући код у bytecode, пошто је то чист Пајтон код.

Глобално окружење[уреди]

Web2py је јединствен у свету Пајтон веб фрејмворкова зато што модели и контролори су извршени, а не увезени. Они нису модули. Они су извршени у једном глобалном окружењу које је иницијализовано приликом сваког http захтева. Ова одлука дизајна има своје предности и мане.

Главна предност се једноставност развоја, специфично за рапидни прототајпинг. Још једна предност је та што сви објекти дефинисани у окружењу су чисто ресетовани приликом сваког http захтева и никада нису дељени кроз захтеве. Ово значи да програмер не мора да брине око промене стања објекта (на пример читљиви атрибут поља базе података) или да брине о цурењу промене на друге конкурентске захтеве или друге апликације. Трећа предност је та што web2py дозвољава постојање вишеструких апликација под истом инстанцом без конфликта чак иако користе различите верзије истог модула или различите модуле са истим именом.

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

Још једна мана је та да, зато што модели и контролори нису базирани на класама, ефикасно поновно коришћење кода је много теже, поготово као немогућност наслеђа од родитељског контролора (нпр. ApplicationController у Ruby on Rails) значи да честа функционалност контролора мора имати референцу кроз све фајлове контролора.

Подржана окружења[уреди]

Оперативни системи, Пајтон верзије и имплементације, виртуелне машине, хардвери[уреди]

web2py се покреће на Windows, Windows CE телефонима, Mac, Unix/Linux, Google App Engine, Amazon EC2, и скоро било који веб хостинг преко Пајтона 2.4[17]/2.5/2.6/2.7.

Избачене верзије web2py-а укључују Пајтон 2.5, али изворна верзија може бити покренута на веријама од 2.4 до 2.7.

web2py од верзије v1.64.0 се покреће немодификован на Јави са Jython-ом 2.5, без било ког познатог ограничења.[18]

web2py код може бити покренут са IronPython на .NET.[19] Ограничења:

  • нема csv модула (дакле без базе података I/O);
  • нема драјвера базе података трећих лица (чак нема ни SQLite, дакле без база података уопште);
  •   нема уграђених веб сервера (осим ако га онеспособите брисањем signals иlogging).

Бинарни web2py[20] ће се покренути са USB меморије или преносивог тврдог диска без зависности, као Преносиви Пајтон.

Веб сервери[уреди]

Web2py може сервисирати захтеве HTTP и HTTPS протокола са уграђеним Rocket сервером,[21] са Apache,[22] Lighttpd,[23] Cherokee,[24] Hiawatha, Nginx и скоро било којим другим веб сервером кроз CGI, FastCGI, WSGI, mod_proxy,[25][26][27] и/или mod_python.

Интегрисано развојно окружење и дебагери[уреди]

Док многобројни web2py програмери користе уређиваче текстова као што су Vim, Emacs или TextMate Web2py такође има уграђени веб базирано интегрисано развојно окружење. Остали преферирају више специјализоване алатке које доносе дебаговање, рефакторинг, итд.


Руковање базама података[уреди]

Апстрактни слој базе података web2py-а динамично и транспаретно генерише SQL упите и покреће се на вишеструким компатибилним бек-енд базама података без потребе за специфичним SQL командама базе података (иако SQL команде могу бити позване експлицитно).

SQLite је укључен у Пајтону као подразумевана web2py база података. Промена стринга конекције дозвољава конекцију на Firebird, IBM DB2, Informix, Ingres, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, и Google App Engine (GAE) са неким упозорењима. Специјалитети:

  • Вишеструке конекције база података.
  • Аутоматско прављење табеле и њено мењање.
  • Аутоматске трансакције.
  • Дистрибуисане трансакције:
    • Од верзије web2py v1.17 са PostgreSQL v8.2 и касније,[29][30] зато што доноси АПИ за дво-фазно обавезизање.
    • Од верзије web2py v1.70.1 са Firebird и MySQL (експериментално).
  • GAE није релациона продавница, али web2py опонаша одређене операције.

DAL је брз, барем поређен са SQLAlchemy и Storm.[31]

Web2py имплементује DAL, не ОРМ. ОРМ базе података мапа се претварају у табеле класа презентујући се као логичке апстракције из слоја базе подтака (нпр., корисничка класа или PurchaseOrder класа), и мапе се чувају у инстанцама тих класа. DAL уместо мапа базе података их претвара у табеле и чува их у инстанцама класа презентујући сетове и рекорде уместо апстракција вишег нивоа. Има веома сличну синтаксу према ОРМ али бржу, и може мапирати скоро сваки SQL израз у DAL израз. DAL може бити коришћен независно од остатка web2py-а.[32]

Ево неколико примера DAL синтаксе:

db = DAL('postgresql://user:pass@localhost/db', pool_size=10)
db.define_table('person',Field('name'),Field('image','upload'))
db.person.insert(name='Martin', image=open('filename.png'))
rows = db((db.person.name=='Martin')|db.person.name.contains('T')).select(orderby=db.person.name.lower())

Последња верзија DAL-а подржава 2D GIS функције са Spatialite и PostGIS. Тренутни АПИ је експерименталан због могућег премештања на 3D АПИ.

Аутоматско мигрирање базе података[уреди]

web2py подржава миграције базе података — промена описа табеле и web2py мења ту табелу у складу са њом. Миграције су аутоматске, али могу бити искључене за било коју табелу, и миграција је типично искључена када је апликација спремна за дистрибуцију у реалном времену. Миграције и покушају миграција су сачувану, документујућу промене.

Ограничења:

  • SQLite не може мењати табелу и мењати тип колоне, већ само да додаје нове вредноси у складу са новим типом.
  • GAE нема концепт мењања табеле, тиме су миграције ограничене.

Публикације[уреди]

web2py књига[уреди]

Базна web2py документација је The Official web2py Book, од Масимо ДиПијера. Приручник је доступан у PDF формату или у одштампаном облику.

Онлајн документација[уреди]

Онлајн документација је повезана из web2py званичне странице, са видео снимцима, интерактивним примерима, интерактивним референцама АПИ-а, epydoc (потпуна библиотека референци), FAQ, папир варања, онлајн алаткама итд.

Видео снимци[уреди]

Одштампано[уреди]

Позадина[уреди]

Подршка[уреди]

Подршка заједнице је доступна кроз web2py базу, web2py поштанску листу над Google Groups, и #web2py канал на freenode-у.[33] Од 2. октобра 2010., комерцијална web2py подршка је доступна од стране 15 компанија широм света.[34]

Програмери[уреди]

Вођа програмера web2py-а је Massimo DiPierro, помоћник професора на Информатици на DePaul Универзитету у Чикагу. Од 2011., web2py званична страница има преко 70 "главних сарадника".[35]

Развојни изворни код[уреди]

Развојни изворни код web2py-а је доступан из два директоријума:

Софтвер трећих лица укључених у web2pу-у[уреди]

Историја и именовање[уреди]

Изворни код за прву јавну верзију web2py-а је објављена под GNU GPL v2.0 27. септембра 2007. од стране Масима ДиПијера као Фрејмворк на пословном нивоу Framework (EWF). Име је промењено два пута звог конфликта имена: EWF v1.7 је био праћен са Gluon v1.0, и Gluon v1.15 је био праћен са web2py v1.16. Лиценца је промењена у LGPLv3 од верзије web2py 1.91.1 21. децембра 2010.

Апликације под Web2py-ем[уреди]

  • Movuca CMS и енџин друштвене мреже.
  • Instant Press Блог платформа.
  • Ourway сајт друштвене мреже.
  • NoobMusic веб сајт рок музике.
  • LinkFindr алатка дијагностиковања мрежа.
  • StarMaker прави музичке апликације караоке-типа.

Дужа листа са скриншотовима може бити пронађена овде и овде. Листа додатака може бити пронађена овде

Референце[уреди]

Спољашње везе[уреди]