web2py

A Wikipédiából, a szabad enciklopédiábó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

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.

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]

Windowson[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:

Licencek[szerkesztés]

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]

Videók[szerkesztés]

Cikkek, könyvek[szerkesztés]

Háttér[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.

Jegyzetek[szerkesztés]

  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