Web2py
Програмер(и) | Масимо ДиПијер |
---|---|
Прво издање | 27.09.2007. |
Стабилно издање | 2.12.3[1]
/ 18.08.2015. |
Репозиторијум | |
Написан у | Пајтон |
Оперативни систем | Cross-platform |
Тип | Фрејмворк Веб Апликације |
Лиценца | GNU Lesser General Public License верзија 3 (LGPLv3) |
Веб-сајт | www 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 такође има уграђени веб базирано интегрисано развојно окружење. Остали преферирају више специјализоване алатке које доносе дебаговање, рефакторинг, итд.
- Aptana Studio са интегрисаним PyDev
- Eclipse са PyDev
- Wing IDE[28]
- Microsoft Visual Studio са Python Tools for Visual Studio
- Pycharm3 има Web2py фрејмворк подршку
Руковање базама података
[уреди | уреди извор]Апстрактни слој базе података web2py-а динамично и транспаретно генерише SQL упите и покреће се на вишеструким компатибилним бек-енд базама података без потребе за специфичним SQL командама базе података (иако SQL команде могу бити позване експлицитно).
SQLite је укључен у Пајтону као подразумевана web2py база података. Промена стринга конекције дозвољава конекцију на Firebird, IBM DB2, Informix, Ingres, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, и Google App Engine (GAE) са неким упозорењима. Специјалитети:
- Вишеструке конекције база података.
- Аутоматско прављење табеле и њено мењање.
- Аутоматске трансакције.
- Дистрибуисане трансакције:
- 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 формату или у одштампаном облику.
- 1st Edition: out of print. Wiley; September 16, 2008; 256 pages;. ISBN 978-0-470-43232-7..
- 2nd Edition: web2py Manual. Wiley; August 26, 2009; 341 pages;. ISBN 978-0-470-59235-9. Read it online. Errata for the book.
- 3rd Edition: Lulu; September 25, 2010 357 pages; Read it online.
- 4th Edition: Lulu; December 9, 2011 583 pages; Read it online.
- 5th Edition: PDF Copy[мртва веза]; March 3, 2013 614 pages;. ISBN 978-0-578-12021-8. Read it online.
Онлајн документација
[уреди | уреди извор]Онлајн документација је повезана из web2py званичне странице, са видео снимцима, интерактивним примерима, интерактивним референцама АПИ-а, epydoc (потпуна библиотека референци), FAQ, папир варања, онлајн алаткама итд.
- Cheat sheet for web2py.
- web2pyslices, рецепти избачени коришћењем movuca друштвене мрећже у web2py.
- Crash Course in Web2py (5-part series).
- Web2py slides (старо).
Видео снимци
[уреди | уреди извор]- web2py Enterprise Web Framework Tutorial.
- web2py "Shootout" video tutorial.
- web2py on the Google appengine.
- web2py: Create, edit, and deploy a basic web app.
Одштампано
[уреди | уреди извор]- "web2py application development cookbook" Архивирано на сајту Wayback Machine (17. јул 2014), Packt, 2012
- Web programming with web2py; Python Magazine; Marco Tabini & Associates, Inc.; June 2008
Позадина
[уреди | уреди извор]Подршка
[уреди | уреди извор]Подршка заједнице је доступна кроз web2py базу, web2py поштанску листу над Google Groups, и #web2py канал на freenode-у.[33] Од 2. октобра 2010, комерцијална web2py подршка је доступна од стране 15 компанија широм света.[34]
Програмери
[уреди | уреди извор]Вођа програмера web2py-а је Massimo DiPierro, помоћник професора на Информатици на DePaul Универзитету у Чикагу. Од 2011, web2py званична страница има преко 70 "главних сарадника".[35]
Развојни изворни код
[уреди | уреди извор]Развојни изворни код web2py-а је доступан из два директоријума:
Софтвер трећих лица укључених у web2pу-у
[уреди | уреди извор]- Пајтон базиране компоненте:
- Rocket, брз, HTTP/1.1-компатибилан, више-нитни, SSL-омогућени и способан за стримовање WSGI сервер;
- fcgi.py: FastCGI/WSGI gateway;
- Login АПИ за Janrain, Dropbox, Google, LDAP, PAM, X509, CAS, OpenID, OAuth 1&2, Loginza
- simplejson: једноставан, брз, потпун, тачан и проширљив JSON кодер и декодер;
- markdown2: Markdown процесор;
- fpdf библиотека за PDF генерисање;
- PyRTF: RTF генератор докумената;
- показивач синтакси;
- pysimplesoap за SOAP сервисе;
- PyRSS2Gen: RSS генератор;
- feedparser: да прелази RSS и Atom приливе.
- JavaScript-базиране компоненте:
- jQuery: лагана JavaScript библиотека;
- CodeMirror: бесплатан уређивач изворног кода;
- C-базиране компоненте:
- SQLite: релационе базе података;
- memcached: систем кеширања за генералне сврхе
- АПИ наплата за Authorize.Net, Google Wallet, Stripe.com
Историја и именовање
[уреди | уреди извор]Изворни код за прву јавну верзију 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 прави музичке апликације караоке-типа.
Дужа листа са скриншотовима може бити пронађена овде и овде. Листа додатака може бити пронађена овде
Референце
[уреди | уреди извор]- ^ „History for VERSION”.
- ^ Web2py (2013), What is web2py?, web2py.com, retrieved 11 October 2013, <http://www.web2py.com/init/default/what>
- ^ Web2py speaks multiple protocols since v1.63
- ^ Using SOAP with web2py
- ^ „Writing Smart Web-based Forms”. Архивирано из оригинала 30. 06. 2017. г. Приступљено 16. 11. 2015.
- ^ Rocket Web Server
- ^ Web2py online IDE with It's All Text![мртва веза]
- ^ How to debug Web2py applications?
- ^ Wing IDE supports debugging for web2py
- ^ Eclipse/PyDev supports debugging for web2py
- ^ Using web2py on Eclipse
- ^ „With Winpdb one can do remote debugging over TCP/IP”. Архивирано из оригинала 9. 11. 2015. г. Приступљено 16. 11. 2015.
- ^ „Encrypted communication in Winpdb”. Архивирано из оригинала 9. 11. 2015. г. Приступљено 16. 11. 2015.
- ^ Simplest web page with web2py: "Hello World" example
- ^ How to use web2py templates without web2py
- ^ Using Joomla templates with web2py
- ^ How to run web2py with Python 2.4
- ^ Web2py runs fully on Java and J2EE using Jython
- ^ Web2py runs with IronPython on .
- ^ MySQL with web2py Windows binary on a USB thumb-drive
- ^ How to run the built-in SSL server
- ^ Web2py with Apache and mod_ssl
- ^ Web2py with Lighttpd and FastCGI
- ^ Web2py with Cherokee
- ^ Apache Module mod_proxy
- ^ Web2py with mod_proxy
- ^ Web2py with mod_proxy and mod_proxy_html
- ^ Using Wing IDE with web2py
- ^ „Distributed transactions with PostgreSQL”. Архивирано из оригинала 03. 01. 2017. г. Приступљено 03. 01. 2017.
- ^ Distributed transactions with PostgreSQL — further details
- ^ ORM Benchmark
- ^ How to use web2py DAL without web2py
- ^ „IRC #web2py channel”. Архивирано из оригинала 27. 10. 2009. г. Приступљено 16. 11. 2015.
- ^ Commercial support for web2py
- ^ List of main contributors to web2py