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 прави музичке апликације караоке-типа.

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

Референце[уреди | уреди извор]

  1. ^ „History for VERSION”. 
  2. ^ Web2py (2013), What is web2py?, web2py.com, retrieved 11 October 2013, <http://www.web2py.com/init/default/what>
  3. ^ Web2py speaks multiple protocols since v1.63
  4. ^ Using SOAP with web2py
  5. ^ „Writing Smart Web-based Forms”. Архивирано из оригинала 30. 06. 2017. г. Приступљено 16. 11. 2015. 
  6. ^ Rocket Web Server
  7. ^ Web2py online IDE with It's All Text![мртва веза]
  8. ^ How to debug Web2py applications?
  9. ^ Wing IDE supports debugging for web2py
  10. ^ Eclipse/PyDev supports debugging for web2py
  11. ^ Using web2py on Eclipse
  12. ^ „With Winpdb one can do remote debugging over TCP/IP”. Архивирано из оригинала 9. 11. 2015. г. Приступљено 16. 11. 2015. 
  13. ^ „Encrypted communication in Winpdb”. Архивирано из оригинала 9. 11. 2015. г. Приступљено 16. 11. 2015. 
  14. ^ Simplest web page with web2py: "Hello World" example
  15. ^ How to use web2py templates without web2py
  16. ^ Using Joomla templates with web2py
  17. ^ How to run web2py with Python 2.4
  18. ^ Web2py runs fully on Java and J2EE using Jython
  19. ^ Web2py runs with IronPython on .
  20. ^ MySQL with web2py Windows binary on a USB thumb-drive
  21. ^ How to run the built-in SSL server
  22. ^ Web2py with Apache and mod_ssl
  23. ^ Web2py with Lighttpd and FastCGI
  24. ^ Web2py with Cherokee
  25. ^ Apache Module mod_proxy
  26. ^ Web2py with mod_proxy
  27. ^ Web2py with mod_proxy and mod_proxy_html
  28. ^ Using Wing IDE with web2py
  29. ^ „Distributed transactions with PostgreSQL”. Архивирано из оригинала 03. 01. 2017. г. Приступљено 03. 01. 2017. 
  30. ^ Distributed transactions with PostgreSQL — further details
  31. ^ ORM Benchmark
  32. ^ How to use web2py DAL without web2py
  33. ^ „IRC #web2py channel”. Архивирано из оригинала 27. 10. 2009. г. Приступљено 16. 11. 2015. 
  34. ^ Commercial support for web2py
  35. ^ List of main contributors to web2py

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