web2py

A web2py nyílt forráskódú webalkalmazás-keretrendszer. Fő célja a gyors, skálázható, biztonságos és hordozható, adatbázis-vezérelt webalapú alkalmazások agilis fejlesztésének támogatása. Python programnyelven írták és Pythonban programozható. Mivel eredetileg oktatóeszköznek tervezték – könnyű használhatóságra és telepíthetőségre törekedve –, semmiféle projektszintű beállítófájlt nem használ.

web2py
Fejlesztőa web2py fejlesztői
Legfrissebb stabil kiadás1.91.6
(2011. január 3.)
Programozási nyelvPython
Operációs rendszerkeresztplatformos
Kategóriawebes keretrendszer
LicencGNU Lesser General Public License version 3 (LGPLv3)
A web2py weboldala

Létrehozását a Ruby on Rails (RoR) keretrendszer inspirálta. A RoR-hoz hasonlóan a gyors fejlesztésre összpontosít, a convention over configuration megközelítést és a Modell-nézet-vezérlő (MVC) építészeti mintát követi. Viszont a Pythonon alapul és átfogó, webes adminisztrációs kezelőfelületet nyújt, programkönyvtárakat kínál különféle adatátviteli protokollok kezelésére, és a Google App Engine-en (GAE) is képes futni.

A Django keretrendszer szintén inspirálta fejlesztőit. A Djangóhoz hasonlóan képes webes űrlapokat generálni adatbázis-táblák kezeléséhez, és kiterjedt adatellenőrzési eszközkészletet kínál.

A Pythonnak köszönhetően a web2py kódja jóval tömörebb a Java-alapú webes keretrendszerekéhez képest, és a szintaxisa sokkal letisztultabb a PHP-alapú keretrendszerekénél. Ez egyszerűbbé teszi az alkalmazások fejlesztését, javítja olvashatóságukat és megkönnyíti karbantartásukat.

Áttekintés

szerkesztés

A web2py teljeskörű keretrendszer abban az értelemben, hogy kész építőelemeket kínál minden gyakori feladathoz. Például:

  • webes sütik, munkamenetek (sessionök), HTTP lekérdezések és HTTP válaszok kezeléséhez;
  • sokféle adatátviteli protokollt ismer[1] – HTML/XML, REST, ATOM és RSS, RTF és CSV, JSON, JSON-RPC és XML-RPC, AMF-RPC (Flash/Flex) –, és támogatja a SOAP-t;[2]
  • CRUD API-t kínál;
  • többféle autentikációs mechanizmust és szerepalapú hozzáférés-vezérlést nyújt;
  • adatbázis-absztrakciós rétege dinamikusan generál SQL lekérdezéseket és többféle adatbázis-szerverrel képes együttműködni;
  • beállítható RAM-, lemez- és memcached-alapú gyorsítótárazást kínál a skálázhatóság elősegítésére;
  • teljeskörű nemzetköziesítésre ad lehetőséget;
  • magában foglalja a jQueryt az Ajaxhoz és a kezelőfelülettel kapcsolatos más műveletekhez;
  • automatikusan naplózza a futásidejű hibákat, azok körülményeivel együtt.

A web2py segít a fejlesztőnek a szoftvermérnöki gyakorlatban bevált módszerek követésében, például:

  • a Model-View-Controller (MVC) tervezési minta alkalmazásában;
  • a webes űrlapok körbefordításában;
  • a szerveroldali munkamenetek alkalmazásában;
  • a fájlok feltöltésének biztonságos kezelésében.

A web2py biztonságos alap mechanizmusokat nyújt a biztonságos alkalmazások fejlesztéséhez. Ez megelőzi a leggyakoribb sérülékenységek előfordulását.

Más webes keretrendszerektől eltérően eredetileg oktatási segédeszköznek készítették a DePaul Egyetemen. Ennek köszönhetően nagyon könnyen megtanulható, könnyen használatba vehető (nem kell telepíteni), és teljeskörű webes fejlesztőkörnyezetet kínál.

A WSGI protokollt alapul véve fejlesztették ki – ez a legújabb adatátviteli protokoll a Python programok számára a webes kiszolgálóprogram és az alkalmazások közötti kapcsolattartáshoz. Kezelőelemeket nyújt a CGI és a FastCGI protokollhoz, és tartalmazza a CherryPy többfonalas működésű, SSL-képes WSGI-szerverét is.

Az agilis szoftverfejlesztési gyakorlatnak megfelelően sűrűn – néhány hetente – jelennek meg az új verziói, és könnyű frissíteni. Ám nagyon ritkán kell naprakészre hozni biztonsági rés vagy megbízhatósági hiányosság miatt. Fejlesztői megtartották az új verziók visszamenőleges kompatibilitását a 2007-ben megjelent, 1.0-s verziója óta, és megfogadták, hogy a jövőben sem szakítják meg azt.

Néhány ritka sajátosság

szerkesztés

Web-alapú integrált fejlesztőkörnyezet (IDE)

szerkesztés

Minden fejlesztési, hibakeresési, tesztelési, karbantartási és távoli adatbázis-adminisztrálási feladat elvégezhető külső programok nélkül – webes felületen, amely maga is egy web2py alkalmazás.

Ebben az IDE-ben elvégezhető a nemzetköziesítés (új nyelv hozzáadása és a fordítások elkészítése). Mindegyik alkalmazás automatikusan kigenerált adminisztrációs felülettel bír, a Djangóhoz hasonlóan. Webes tesztelési lehetőségeket és webes shellt is kínál az IDE.

Nem muszáj használni – parancssorból és más IDE-kben is fejleszthetők az alkalmazások. Például a Wing IDE grafikus hibakeresőt kínál a web2py alkalmazásokhoz,[3] melyeket eközben a böngészőből lehet kezelni, változók értékét lehet vizsgálni és módosítani, meghívhatunk függvényeket stb.

Rugalmas nézetek

szerkesztés

A közismert Hello World program kódja a web2py-jal elkészítve legegyszerűbb esetben (egyszerű weblap[4] sablon nélkül) így néz ki:

def hello():
    return 'Hello World'

Python alapú sablonok: a web2py része egy gyors, tisztán Pythonban megírt sablonnyelv:

  • behúzási követelmények nélkül;
  • szerveroldali Dokumentum Objektummodellel (DOM).

Joomlás sablonok: Joomla! 1.x-hez készített sablonok átalakíthatók web2py alá.[5]

Generikus nézetek: ha nem készítünk nézetet egy vezérlőhöz, a web2py automatikusan generikus nézetet nyújt a vezérlő által visszaadott változók megjelenítéséhez. Így elkészíthető az alkalmazás logikai váza egyetlen sor HTML-kód írása nélkül, és működő prototípust kapunk. Az előbbi példa generikus változata, az alapbeállítás szerinti sablonnal megjelenítve:

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

Erős biztonság

szerkesztés

A web2py egyik erőssége a biztonság. Eddig még sosem derült ki vele kapcsolatban biztonsági probléma. Az OWASP szerint leggyakoribb 10 biztonsági probléma listája, és a web2py-ba épített megoldások ezek ellen:[6]

Jegyrendszer

szerkesztés

Mindegyik web2py alkalmazás része a jegykezelő rendszer:

  • A futásidejű hibák naplózásra kerülnek, és az érintett felhasználó jegyet kap róluk. Ez lehetővé teszi a hibák nyomon követését.
  • A hibák leírását és a hozzájuk tartozó forráskódot csak az adminisztrátor érheti el, aki a hibák dátuma és a felhasználó IP-címe alapján keresheti vissza és vizsgálhatja a hibákat. Nem fordulhat elő, hogy egy hiba következtében forráskód jelenik meg a felhasználó előtt.

Hordozható cron

szerkesztés

Ez egy mechanizmus az ismétlődő taszkok létrehozásához és háttérben való futtatásához. Megkeresi az alkalmazáshoz tartozó crontab fájlt, amelyet a szabályos crontab formátumban kell megírni. Háromféle üzemmód választható:

  • Softcron: a cron rutinok egy weblap tartalmának elküldése után kerülnek végrehajtásra, ezért bizonytalan a végrehajtásuk időpontja. Privilégium nélküli Apache CGI/WSGI telepítésekben használható.
  • Hardcron: a cron programfonal a web2py indulásakor indul el. Windowsokon és CherryPy-alapú önálló web2py telepítésekhez használható.
  • Extcron: a cron függvények parancssorból kerülnek meghívásra, általában az operációs rendszer crontabjából. Unix/Linux rendszereken és olyan helyeken használatos, ahol a cron triggereket akkor is végre kell hajtani, ha a web2py éppen nem fut. CGI/WSGI telepítésekhez is jó, ha hozzáférhető a rendszer crontabja.

Forráskód védelme

szerkesztés

A web2py-jal lefordíthatók a webes alkalmazások, és így bájtkódra fordítva tehetők közzé, forráskódjuk nélkül. Ez segít, de nem garantálja a forráskód védelmét, ugyanis disassemblereket és decompilereket is készítettek már a Python bájtkódokhoz:

  • A Python alapkönyvtárának Dis modulja[7] lehetővé teszi a bájtkódokból az elemi utasítások visszafejtését, de nem nyerhető vissza vele a Python forráskód.
  • A nyílt forrású Decompyle Python disassembler és decompiler visszaalakítja a Python bájtkódot azzal ekvivalens Python forráskóddá. A Python 1.5-ös és 2.3-as közötti verzióival lefordított bájtkódokat (.pyc és .pyo) képes feldolgozni, az említett verziókat is beleértve. A 2.3-asnál újabb verziókat nem támogatja, és nehézkes a használata.
    • A kereskedelmi decompyle szolgáltatás t a Decompyle-ból fejlesztették ki. Az 1.5-ös és 2.6-os verzió közötti Python bájtkódokat képes visszafordítani, kisebb korlátozásokkal.
  • A nyílt forrású UnPyc eszköz képes a Python *.pyc and *.pyo fájlok elemi utasításokra való szétszedésére, elemzésére és visszafordítására, váltakozó sikerrel. A Python v2.5-ös és v2.6-os verzióit támogatja.

A Python ugyanakkor elég könnyen kiegészíthető C-ben és C++-ban írt modulokkal,[8][9][10] a programok sebességének növelése vagy az értékes kódrészletek szellemi tulajdonjogának jobb védelme érdekében.

Telepítés, frissítés

szerkesztés

A web2py-t Pythonban írták, de nincs rá szükség a futtatásához. Elég letölteni a honlapjáról,[11] kibontani a ZIP csomagot, és elindítani – bármelyik operációs rendszeren. A web2py csomag része minden, ami szükséges a fejlesztéshez, többek között egy webkiszolgáló és egy adatbázis-kezelő program. Nincs szükség telepítési eljárásra, beállításokra, és rendszerhéjban kiadott parancsokra.

Első lépések

szerkesztés

Letöltés után ki kell bontani a ZIP csomagot és el kell indítani a web2py.exe programot. Jelszót kell választani, az adminisztrációs felület linkjére kattintani, és megadni ugyanazt a jelszót.

Forrásból is futtatható:

 python web2py.py

Windows szolgáltatásként való futtatásához ezt az útmutatót kell követni.[12]

Mac OS X-en

szerkesztés

Letöltés után ki kell bontani a ZIP csomagot, és rákattintani a web2py.app-ra. Jelszót kell választani, rákattintani az adminisztrációs felület linkjére, és megadni ugyanazt a jelszót.

Forrásból is futtatható az alábbi paranccsal:

  python web2py.py

Unixokon, köztük Linuxon és BSD-ken

szerkesztés

Forrásból futtatható:

 python2.5 web2py.py

Jelszót kell választani, rákattintani az adminisztrációs felület linkjére, és megadni ugyanazt a jelszót.

Google App Engine-en

szerkesztés

A web2py motorját forráskódú formájában kell telepíteni.[13] Tehát a GAE a web2py-t futtatja majd, amely viszont az alatta lévő web2py alkalmazásokat futtatja.

Részletes leírás a web2py GAE-re való telepítéséről,[14] illetve a web2py-jal fejlesztett alkalmazások futtatásáról GAE-n.[15]

Teljesítmény-problémák kis forgalmú webhelyeken
szerkesztés

A GAE a .py fájlokat lefordítja bájtkódra, és gyorsítótárazza azokat 60 másodpercre. Kis forgalmú webhelyeken jó trükk a teljesítmény fokozására egy cron job,[16] amely 60 másodpercenként megpingeli a web2py valamelyik vezérlőfájlját, így frissen tartja annak bájtkódját a GAE gyorsítótárában.[17]

Figyelmeztetések

szerkesztés

Telepítése után a web2py mindegyik elindításakor jelszót kell választani. Ez a továbbiakban az adminisztrátori jelszavunk. Ha nem választunk jelszót, az adminisztrációs felület letiltódik. Az admin felület (/admin/default/index) csak a localhoston (azaz saját gépen), illetve távolról SSH-alagúton keresztül érhető el, és mindig jelszót kér.

Operációs rendszerek, virtuális gépek, hardverek

szerkesztés

A web2py a Windowsokon, Windows CE-s telefonokon, Mac rendszereken, Unixokon és Linuxokon, Google App Engine-en, Amazon EC2-n, és szinte bármelyik web-hostingon futtatható a Python 2.4[18]/2.5/2.6/2.7-es verziói révén.

A bináris (lefordított) kiadásai a Python 2.5-ös verzióját tartalmazzák, de a forráskódban kiadott változatai a 2.4 és 2.7 közötti összes Python-verzión futtathatók.

A web2py az v1.64.0-s verziója óta módosítás nélkül is fut Java platformon a Jython 2.5-ös verziója révén, bármiféle ismert korlátozás nélkül.

A web2py kódja a .NET Frameworkön is fut, IronPythonnal, a következő korlátozásokkal:

  • nincs csv modul (emiatt adatbázis-kezelés sincs);
  • nincsenek külső adatbázis-meghajtó programok (még SQLite sem, tehát semmiféle adatbázis nem érhető el);
  • nincs beépített webszerver (hacsak nem távolítjuk el belőle a signals és a logging modult).

Ezeknek az az oka, hogy az IronPythonban még nincs csv, sqlite, signals és logging modul.

A web2py binárisai USB flash meghajtókról is futtathatók, függőségek nélkül, úgy, mint a Portable Python.

Webszerver-elrendezések

szerkesztés

A beépített CherryPy szerverrel HTTP-n és HTTPS-en[19] keresztül érkező lekérdezéseket is kiszolgálhatunk. A web2py együttműködik az Apache-val,[20] a Lighttpd-vel,[21] a Cherokee-val,[22] az Nginxszel és szinte bármelyik webszerverrel a CGI, a FastCGI, a WSGI, a mod proxy,[23][24][25] és/vagy a mod python révén.

A web2py frissítése

szerkesztés

A web2py kézikönyvében olvasható útmutató a frissítésről.

Adatbázis-kezelés

szerkesztés

A web2py adatbázis-absztrakciós rétege (Data access layer – DAL) dinamikusan és észrevétlenül generálja ki az SQL lekérdezéseket, és sokféle adatbázis-kezelőn fut. Nem szükséges adatbázis-specifikus SQL lekérdezéseket használnunk. Viszont kiadhatunk az adott adatbázis-kezelőhöz tartozó explicit SQL utasításokat.

Az SQLite-ot beépítik az újabb Pythonokba, ezáltal a web2py-ba is, tehát ez az alap adatbázis. Egy kapcsolódási string lecserélésével átválthatunk Firebirdre, IBM DB2-re, Informixra, Ingres re, Microsoft SQL Serverre, MySQL-re, Oracle adatbázis-kezelőre, PostgreSQL-re, illetve Google App Engine-re (GAE), néhány korlátozással. Egyedi vonások:

Ez az adatbázis-absztrakciós réteg gyors, a sebessége legalábbis összevethető az SQLAlchemy és a Storm sebességével.[26]

A web2py egyszerre több adatbázishoz is képes kapcsolódni. Automatikus tranzakciókat hajt végre. Szükség esetén még adatbázis-táblákat is létrehoz, illetve módosítja azokat.

Ez DAL, nem pedig ORM. Az ORM-ek az adatbázis-táblákat osztályokra képezik le, a rekordokat pedig ezeknek az osztályoknak a példányaira. Ez a DAL viszont egy osztály példányaira képezi le az adatbázis-táblákat, a rekordokat pedig egy másik osztály példányaira. A szintaxisa nagyon hasonlít az ORM-ekére, de ez a DAL gyorsabb, és szinte bármilyen SQL kifejezést képes DAL kifejezésekre leképezni. A web2py nélkül is használható.[27]

Automatikus adatbázis-migrálás

szerkesztés

A web2py támogatja az adatbázisok migrálását. Elég módosítani egy tábla definícióját, és annak megfelelően ALTER utasítással módosítja a táblát. Például egy mező típusát logikairól (boolean) sztringre módosítva az adatbázist ennek megfelelően módosítja, és a mezők értékeit logikaiból sztringgé alakulnak.

A web2py alatt a migrációk automatikusak, de bármelyik táblára letilthatók. A web2py minden migrációt és migrációs próbálkozást naplóz egy fájlba, így láthatjuk az általa elvégzett adatbázis-módosításokat.

Korlátozások:

  • Az SQLite elég gyengén érti a migrációs lépéseket. Különösen nem képes a táblák módosítására, illetve a mezők típusának módosítására. Mindössze az új értékeket tárolja el az új típusnak megfelelően.
  • GAE-n ismeretlen a táblák módosításának fogalma, ezért csak táblaoszlopok hozzáadására és törlésére van lehetőség (nem kerülnek törlésre, csak figyelmen kívül lesznek hagyva). Az oszlopok egyes attribútumait – például hosszát – módosíthatjuk, mert amúgy is figyelmen kívül vannak hagyva. Egyes migrációk nem működnek GAE-n.

Alkalmazások

szerkesztés

Kulcsrakész alkalmazások forráskóddal együtt

szerkesztés

Sok ingyenes és kulcsrakész web2py alkalmazást találhatunk teljes forráskódjukkal együtt, testreszabásra alkalmas formában, különféle licencfeltételek mellett.

Többségük ebben a listában található a web2py honlapján. Néhány közülük:

Két alkalmazást máshonnan tölthetünk le:

  • a pyForum egy érett fórumrendszer;
  • a T3[halott link] wiki bárhol futtatható (a Google App Engine-en is), az adminisztrátora adatbázis-táblákat is definiálhat benne, és a lapokba Python kódot is beágyazhat.

Webhelyek és webes alkalmazások, amelyek a web2py-on alapulnak

szerkesztés

Két lista arról, hol használják:

A web2py kódját a v1.91.1 óta GNU Lesser General Public License version 3 (LGPLv3) alatt bocsátják ki. Régebbi, jelenleg is elérhető verziói GNU GPL v2.0 licenc alattiak.

Ez a licenc nem terjed ki a web2py-jal együtt kibocsátott, de máshonnan származó programkönyvtárakra (azok mindegyikére MIT vagy BSD típusú licenc érvényes), és nem vonatkozik a web2py-jal kifejlesztett alkalmazásokra sem.

A web2py hivatalos bináris (lefordított) kiadásai freeware-ek.[28] Szabadon felhasználhatók és újra kibocsáthatók, de kizárólag díjmentesen. Másféle bináris kiadás nem bocsátható ki a web2py-ból.

A web2py-jal elkészített alkalmazások bármilyen licenc alatt kibocsáthatók, mindaddig, amíg nem tartalmaznak forráskódot a web2py-ból. Különösen ilyenek a bájtkódra lefordítva közzétett, zárt forrású szoftverek. A web2py adminisztrációs felületén egyetlen gombnyomással elindítható a bájtkódra fordítás.

Nyugodtan közzétehető a web2py is (forrásban vagy lefordítva) az alkalmazásokkal, mindaddig, amíg azok licence egyértelműen jelzi, hol ér véget az adott alkalmazás és hol kezdődik a web2py.

Tilos:

  • azt állítani, hogy a web2py-jal elkészített alkalmazás fejlesztője készítette a web2py-t;
  • magának a web2py-nak olyan származékát előállítani, amely sérti GNU GPL v2.0-t;
  • közzétenni a web2py olyan bináris kiadását, amelyet nem Massimo DiPierro adott ki hivatalosan.

A web2py szerzői joga Massimo DiPierroé. A web2py védjegy Massimo DiPierro tulajdona.

Kiadványok

szerkesztés

Cikkek, könyvek

szerkesztés

Támogatás

szerkesztés

Közösségi támogatást érhetünk el:

2011. január 15-én világszerte 14 cég kínált támogatási szolgáltatást web2py-hoz.[29]

Fejlesztők

szerkesztés

Vezető fejlesztő (kezdettől fogva): Massimo DiPierro (a chicagói DePaul Egyetem számítástudományi docense).

2011. január 15-én a web2py honlapján 74 „fő közreműködőt” soroltak fel.[30]

A web2py-ba foglalt más szoftverek

szerkesztés

Történet és nevek

szerkesztés

A web2py első nyilvános verziójának forráskódját 2007. szeptember 27-én tette közzé Massimo DiPierro, GNU GPL v2.0 licenc alatt, Enterprise Web Framework (EWF) névvel. Kétszer kellett átkeresztelni névazonosság miatt: az EWF 1.7-et a Gluon 1.0 követte, a Gluon 1.15-öt pedig a web2py 1.16. A v1.91.1-nél LGPLv3-ra módosították a licencét.

A Web.py neve hasonló, de a két szoftvernek semmi köze egymáshoz.

Lelőhelyek, hivatkozások

szerkesztés

A web2py legfrissebb fejlesztői pillanatfelvétele két kódtárházban érhető el:

A Freshmeat, az Ohloh és a Google Trends – hiányosságaik és tökéletlenségük ellenére – értékes bepillantást nyújtanak a szoftverfejlesztési projektek hátterébe, forráskódjuk összetételébe, életerejébe és népszerűségébe:

Fordítás

szerkesztés
  • Ez a szócikk részben vagy egészben a Web2py című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
  1. A web2py sokféle adatátviteli protokollt ismer a v1.63 óta
  2. SOAP használata web2py-jal
  3. A Wing IDE használata web2py-hoz
  4. Legegyszerűbb weblap a web2py-jal: "Hello World" példa
  5. sablonok átalakítása web2py alá
  6. Az OWASP szerint leggyakoribb 10 biztonsági probléma listája, és a web2py-ba épített megoldások ezek ellen
  7. Disassembler a Python bájtkódhoz
  8. Python modulok készítése C-ben és C++-ban. [2009. szeptember 4-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. szeptember 29.)
  9. a Cython leegyszerűsíti a C bővítőmodulok írását Pythonhoz
  10. a Pyrexet a Python modulok készítésének segítésére fejlesztették ki, a szintaxisa nagyon hasonlít a Pythonéhoz
  11. Bináris és forráskódú letöltések a web2py honlapján. [2009. április 16-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. szeptember 23.)
  12. Hogyan futtathatjuk a web2py-t Windows szolgáltatásként?
  13. A web2py legfrissebb forráskódja az összes platformra
  14. Web2py telepítése Google App Engine-re. [2009. október 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. október 26.)
  15. Web2py-jal fejlesztett alkalmazások futtatása GAE-n
  16. Cron jobok a Google App Engine-en
  17. Teljesítményfokozó trükk GAE-re telepített Python programokhoz
  18. Web2py futtatása Python 2.4-gyel
  19. A web2py-ba beépített SSL-szerver használata
  20. Web2py Apache-val és mod_ssllel
  21. Lighttpd használata FastCGI-vel
  22. Web2py futtatása Cherokee-val
  23. A mod_proxy leírása
  24. Web2py mod_proxyval
  25. Web2py mod_proxyval és mod_proxy_html-lel
  26. ORM benchmark
  27. A web2py DAL használata web2py nélkül
  28. A web2py hivatalos binárisai freeware-ek
  29. Web2py-hoz támogatási szolgáltatást nyújtó cégek
  30. A web2py fejlesztésében komolyabban közreműködők listája