Web2py

S Vikipedije, slobodne enciklopedije
web2py
Programer(i)Masimo DiPijer
Prvo izdanje27.09.2007.
Stabilno izdanje
2.12.3[1] / 18.08.2015.
Repozitorijum Uredi na Vikipodacima
Napisan uPajton
Operativni sistemCross-platform
TipFrejmvork Veb Aplikacije
LicencaGNU Lesser General Public License verzija 3 (LGPLv3)
Veb-sajtwww.web2py.com
mailing list

Web2py frejmvork veb aplikacije otvorenog koda napisan u Pajton programskom jeziku. Web2py allows dozvoljava veb programerima da programiraju dinamični veb sadržaj korišćenjem Pajtona. Web2py je dizajniran da pomogne pri smanjenju teških zadataka razvoja, kao što je razvoj veb formi od nule, iako bi veb programer napravio formu od nule da je to potrebno.[2]

Web2py je originalno dizajniran kao alatka učenja sa akcentom na lakoću korišćenja i raspoređivanja. Prema tome, nema nijedan konfiguracioni fajl na nivou projekta. Dizajn web2py-a je inspirisan od strane Ruby on Rails i Django frejmvorkova. Kao ovi frejmvorkovi, web2py se fokusira na rapidni razvoj, stavljajući akcenat na konvenciju preko konfiguracije pristup i prati MVC arhitekturu..

Pregled[uredi | uredi izvor]

Web2py je frejmvork punog steka koji ima ugrađene komponente za sve glavne funkcije, uključujući:

Web2py podstiše zvučni inženjering softverskih praksi kao što su

  • MVC obrazac;
  • samo-podnošenje[5] veb formi;
  • sesije sa serverske strane;
  • sigurno rukovanje postavljenih fajlova.

Web2py se koristi WSGI protokolom, Pajton-orijentisanim protokolom za komunikaciju između veb servera i veb aplikacija. Takođe obezbeđuje rukovodioice za CGI i FastCGI protokole, i sadrži više-nitni, SSL-omogućeni Rocket[6] wsgiserver.

Karakteristične mogućnosti[uredi | uredi izvor]

Veb-bazirano integrisano razvojno okruženje[uredi | uredi izvor]

Sav ravoj, debaging, testiranje, održavanje i administracija daljinskih baza podataka mogu (opciono) biti izvršeni bez alatki trećih lica, preko veb interfejsa, same web2py aplikacije. Internacionalizacija (dodavanje jezika i pisanje prevoda) takođe može biti izvršena iz ovog integrisanog razvojnog okruženja. Svaka aplikacija ima automatski generisani interfejs adiministracije, slično Django-u. Veb integrisano razvojno okruženje takođe uključuje veb-bazirano testiranje i veb-baziranu ljusku.

Aplikacije takođe mogu biti napravljene iz interfejsa komandne linije ili programirani iz drugih integrisanih razvojnih okruženja.[7] Dalje opcije debagovanja:[8]

  • Wing IDE dozvoljava grafičko debagovanje web2py aplikacija[9] dok interagujete sa njim kroz vaš veb pregledač, možete proveriti i menjati promenljive, praviti potprogramske pozive itd.
  • Eclipse/PyDev — Eclipse sa Aptana PyDev dodatkom — podržava web2py takođe.[10][11]
  • Debager pdb koji je moguće proširiti je modul Pajtonove standardne biblioteke.
  • Sa platformski-nezavisnim debagerom otvorenog koda Winpdb, osoba može izvršiti daljinsko debagovanje[12] preko TCP/IP, kroz kodiranu konekciju.[13]

Hello World program sa web2py-em u njegovom najjednostavnijem obliku (jednostavna veb stranica[14] bez šablona) izgleda ovako:

def hello():
    return 'Hello World'

Web2py uključuje jezik šabloniranja baziranog na Pajtonu, bez zahtevanja uvlačenja i modelom objektnog dokumenta sa serverske strane (DOM).

Sistem šablona radi bez web2py-a.[15] Joomla 1.x šabloni mogu biti konvertovani u web2py projekte.[16]

Web2py takođe uključuje dve biblioteke: markdown2 tekst-do-HTML filter, koji konvertuje Markdown markaup do HTML-a u toku pokretanja; i markmin koji je inspirisan markdown-om ali podržava tabele, html5 video/zvučni i ugrađeni protkol.

Kontrolor bez automatskog pregleda koristi generični pregled koji obrađuje promenljive vraćene od kontrolora, omogućavajući razvoj logike poslovnih aplikacija pre pisanja HTML-a. "Hello World" primer korišćenjem podrazumevanog šablona:

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

Izlaz dict() akcije je automatski obrađen u HTML-u ako je stranica zatražena sa .html ekstenzijom, u JSON ako je stranica zatražena u .json ekstenziji, u XML-u ako je zatražena sa .xml. Podržava druge protokole uključujući jsonp, rss, ics, google maps, itd. i moguće je proširiti je. Evo ga više kompleksan primer koda koji definiše tabelu, i razotkriva rešetku ulogovanim korisnicima:

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

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

Sistem tiketiranja[uredi | uredi izvor]

Svaka web2py aplikacija dolazi sa sistemom tiketiranja:

  • Ako se dogodi greška, sačuvana je i tiket je prikazan korisniku. To omogućava praćenje greški.
  • Greške i izvorni kodovi su dostupni samo administratorima, koji mogu pretraživati i preuzimati greške po datumu ili internet adrese klijenta. Nijedna greška ne može rezultovati prikazivanjem koda korisnicima.

Prenosivi kron[uredi | uredi izvor]

Kron je mehanizam za pravljenje i pokretanje ponavljajućih zadataka u pozadini. Pretražuje crontab fajl specifičnog za aplikaciju koi je sandardni crontab format. Tri moda operacija su dostupna:

  • Meki kron: kron rutine su proverene posle prikazivanja sadržaja veb stranice, ne garantuje preciznost izvšenja. Za nepriviligovane Apache CGI/WSGI instalacije.
  • Tvrdi kron: nit krona počinje prilikom pokretanja web2py-a. Za Windows i Rocket/samostalne web2py instalacije.
  • Sistemski kron: kron potprogrami bivaju prinudno pozvani iz interfejsa komandne linije, obično iz sistemskog crontab-a. Za Unix/Linux sisteme gde kron mora biti izvršen iako web2py nije pokrenut u tom trenutku; takođe dobro za CGI/WSGI instalacije ako imate pristup sistemskom crontab-u.

Zakazivač zadataka[uredi | uredi izvor]

Od verzije 2.3 korišćenje krona je obeshrabreno otkad web2py dolazi sa šefovskim/radničkim zakazivačem zadataka. Poslovi mogu biti definisani u modelima i zakazivani su pravljenjem podatka u bazi podataka. Korisnici mogu započeti procese koji kupe i izvršavaju zadatke u pozadini. Raspored je bolji nego kron zato što dozvoljava da se definišu više parametara (vreme pokretanja, vreme prestanka, broj ponavljanja, broj suđenja u slučaju greške) i radi bolji posao prilikom pokretanja sa konstantnim korišćenjem izvora.

Bytecode distribucija[uredi | uredi izvor]

Web2py može da kompajluje veb aplikacije za distribuciju u bytecode kompajlovanoj formi, bez izvornog koda. Nasuprot frejmvorkovima koji koriste specijalizovane jezike za svoje preglede, Web2py može takođe kompajlovati pregledajući kod u bytecode, pošto je to čist Pajton kod.

Globalno okruženje[uredi | uredi izvor]

Web2py je jedinstven u svetu Pajton veb frejmvorkova zato što modeli i kontrolori su izvršeni, a ne uvezeni. Oni nisu moduli. Oni su izvršeni u jednom globalnom okruženju koje je inicijalizovano prilikom svakog http zahteva. Ova odluka dizajna ima svoje prednosti i mane.

Glavna prednost se jednostavnost razvoja, specifično za rapidni prototajping. Još jedna prednost je ta što svi objekti definisani u okruženju su čisto resetovani prilikom svakog http zahteva i nikada nisu deljeni kroz zahteve. Ovo znači da programer ne mora da brine oko promene stanja objekta (na primer čitljivi atribut polja baze podataka) ili da brine o curenju promene na druge konkurentske zahteve ili druge aplikacije. Treća prednost je ta što web2py dozvoljava postojanje višestrukih aplikacija pod istom instancom bez konflikta čak iako koriste različite verzije istog modula ili različite module sa istim imenom.

Glavna mana globalnog okruženja je ta što fajlovi modela i fajlovi kontrolora nisu moduli i redosled izvršenja je bitan (iako može biti određen korišćenjem uslovnih modela). Konflikti imenovanja se češće dešavaju nego u normalnim Pajton modulima. Neke standardne Pajton razvojne alatke neće razumeti definisane u modelima i kontrolorima. Štaviše, programeri moraju imati u vidu da kod u modelima je izvršen prilikom svakog zahteva i ovo može uticati na performanse negativno. Ništa tu web2py-u ne sprečava programere od korišćenja i uvoženja normalnih Pajton mnodula (pristup bez modela) i za ovu svrhu web2py omogućava nit lokalnog objekta (trenutni) da olakša pristup objektima povezanim sa trenutnim zahtevom. Ali, u ovom slučaju, programer mora znati da postoje mane na koje drugi frejmvorkovi mogu naleteti: promena stanja objekta definisanog u modulu može delovati na druge konkurentske zahteve.

Još jedna mana je ta da, zato što modeli i kontrolori nisu bazirani na klasama, efikasno ponovno korišćenje koda je mnogo teže, pogotovo kao nemogućnost nasleđa od roditeljskog kontrolora (npr. ApplicationController u Ruby on Rails) znači da česta funkcionalnost kontrolora mora imati referencu kroz sve fajlove kontrolora.

Podržana okruženja[uredi | uredi izvor]

Operativni sistemi, Pajton verzije i implementacije, virtuelne mašine, hardveri[uredi | uredi izvor]

web2py se pokreće na Windows, Windows CE telefonima, Mac, Unix/Linux, Google App Engine, Amazon EC2, i skoro bilo koji veb hosting preko Pajtona 2.4[17]/2.5/2.6/2.7.

Izbačene verzije web2py-a uključuju Pajton 2.5, ali izvorna verzija može biti pokrenuta na verijama od 2.4 do 2.7.

web2py od verzije v1.64.0 se pokreće nemodifikovan na Javi sa Jython-om 2.5, bez bilo kog poznatog ograničenja.[18]

web2py kod može biti pokrenut sa IronPython na .NET.[19] Ograničenja:

  • nema csv modula (dakle bez baze podataka I/O);
  • nema drajvera baze podataka trećih lica (čak nema ni SQLite, dakle bez baza podataka uopšte);
  •   nema ugrađenih veb servera (osim ako ga onesposobite brisanjem signals ilogging).

Binarni web2py[20] će se pokrenuti sa USB memorije ili prenosivog tvrdog diska bez zavisnosti, kao Prenosivi Pajton.

Veb serveri[uredi | uredi izvor]

Web2py može servisirati zahteve HTTP i HTTPS protokola sa ugrađenim Rocket serverom,[21] sa Apache,[22] Lighttpd,[23] Cherokee,[24] Hiawatha, Nginx i skoro bilo kojim drugim veb serverom kroz CGI, FastCGI, WSGI, mod proxy,[25][26][27] i/ili mod python.

Integrisano razvojno okruženje i debageri[uredi | uredi izvor]

Dok mnogobrojni web2py programeri koriste uređivače tekstova kao što su Vim, Emacs ili TextMate Web2py takođe ima ugrađeni veb bazirano integrisano razvojno okruženje. Ostali preferiraju više specijalizovane alatke koje donose debagovanje, refaktoring, itd.

Rukovanje bazama podataka[uredi | uredi izvor]

Apstraktni sloj baze podataka web2py-a dinamično i transparetno generiše SQL upite i pokreće se na višestrukim kompatibilnim bek-end bazama podataka bez potrebe za specifičnim SQL komandama baze podataka (iako SQL komande mogu biti pozvane eksplicitno).

SQLite je uključen u Pajtonu kao podrazumevana web2py baza podataka. Promena stringa konekcije dozvoljava konekciju na Firebird, IBM DB2, Informix, Ingres, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, i Google App Engine (GAE) sa nekim upozorenjima. Specijaliteti:

  • Višestruke konekcije baza podataka.
  • Automatsko pravljenje tabele i njeno menjanje.
  • Automatske transakcije.
  • Distribuisane transakcije:
    • Od verzije web2py v1.17 sa PostgreSQL v8.2 i kasnije,[29][30] zato što donosi API za dvofazno obavezizanje.
    • Od verzije web2py v1.70.1 sa Firebird i MySQL (eksperimentalno).
  • GAE nije relaciona prodavnica, ali web2py oponaša određene operacije.

DAL je brz, barem poređen sa SQLAlchemy i Storm.[31]

Web2py implementuje DAL, ne ORM. ORM baze podataka mapa se pretvaraju u tabele klasa prezentujući se kao logičke apstrakcije iz sloja baze podtaka (npr., korisnička klasa ili PurchaseOrder klasa), i mape se čuvaju u instancama tih klasa. DAL umesto mapa baze podataka ih pretvara u tabele i čuva ih u instancama klasa prezentujući setove i rekorde umesto apstrakcija višeg nivoa. Ima veoma sličnu sintaksu prema ORM ali bržu, i može mapirati skoro svaki SQL izraz u DAL izraz. DAL može biti korišćen nezavisno od ostatka web2py-a.[32]

Evo nekoliko primera DAL sintakse:

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())

Poslednja verzija DAL-a podržava 2D GIS funkcije sa Spatialite i PostGIS. Trenutni API je eksperimentalan zbog mogućeg premeštanja na 3D API.

Automatsko migriranje baze podataka[uredi | uredi izvor]

web2py podržava migracije baze podataka — promena opisa tabele i web2py menja tu tabelu u skladu sa njom. Migracije su automatske, ali mogu biti isključene za bilo koju tabelu, i migracija je tipično isključena kada je aplikacija spremna za distribuciju u realnom vremenu. Migracije i pokušaju migracija su sačuvanu, dokumentujuću promene.

Ograničenja:

  • SQLite ne može menjati tabelu i menjati tip kolone, već samo da dodaje nove vrednosi u skladu sa novim tipom.
  • GAE nema koncept menjanja tabele, time su migracije ograničene.

Publikacije[uredi | uredi izvor]

web2py knjiga[uredi | uredi izvor]

Bazna web2py dokumentacija je The Official web2py Book, od Masimo DiPijera. Priručnik je dostupan u PDF formatu ili u odštampanom obliku.

Onlajn dokumentacija[uredi | uredi izvor]

Onlajn dokumentacija je povezana iz web2py zvanične stranice, sa video snimcima, interaktivnim primerima, interaktivnim referencama API-a, epydoc (potpuna biblioteka referenci), FAQ, papir varanja, onlajn alatkama itd.

Video snimci[uredi | uredi izvor]

Odštampano[uredi | uredi izvor]

Pozadina[uredi | uredi izvor]

Podrška[uredi | uredi izvor]

Podrška zajednice je dostupna kroz web2py bazu, web2py poštansku listu nad Google Groups, i #web2py kanal na freenode-u.[33] Od 2. oktobra 2010, komercijalna web2py podrška je dostupna od strane 15 kompanija širom sveta.[34]

Programeri[uredi | uredi izvor]

Vođa programera web2py-a je Massimo DiPierro, pomoćnik profesora na Informatici na DePaul Univerzitetu u Čikagu. Od 2011, web2py zvanična stranica ima preko 70 "glavnih saradnika".[35]

Razvojni izvorni kod[uredi | uredi izvor]

Razvojni izvorni kod web2py-a je dostupan iz dva direktorijuma:

Softver trećih lica uključenih u web2pu-u[uredi | uredi izvor]

Istorija i imenovanje[uredi | uredi izvor]

Izvorni kod za prvu javnu verziju web2py-a je objavljena pod GNU GPL v2.0 27. septembra 2007. od strane Masima DiPijera kao Frejmvork na poslovnom nivou Framework (EWF). Ime je promenjeno dva puta zvog konflikta imena: EWF v1.7 je bio praćen sa Gluon v1.0, i Gluon v1.15 je bio praćen sa web2py v1.16. Licenca je promenjena u LGPLv3 od verzije web2py 1.91.1 21. decembra 2010.

Aplikacije pod Web2py-em[uredi | uredi izvor]

Duža lista sa skrinšotovima može biti pronađena ovde i ovde. Lista dodataka može biti pronađena ovde

Reference[uredi | uredi izvor]

  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”. Arhivirano iz originala 30. 06. 2017. g. Pristupljeno 16. 11. 2015. 
  6. ^ Rocket Web Server
  7. ^ Web2py online IDE with It's All Text![mrtva veza]
  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”. Arhivirano iz originala 9. 11. 2015. g. Pristupljeno 16. 11. 2015. 
  13. ^ „Encrypted communication in Winpdb”. Arhivirano iz originala 9. 11. 2015. g. Pristupljeno 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”. Arhivirano iz originala 03. 01. 2017. g. Pristupljeno 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”. Arhivirano iz originala 27. 10. 2009. g. Pristupljeno 16. 11. 2015. 
  34. ^ Commercial support for web2py
  35. ^ List of main contributors to web2py

Spoljašnje veze[uredi | uredi izvor]