Ugrás a tartalomhoz

web2py

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen Atobot (vitalap | szerkesztései) 2014. december 22., 16:28-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (Informatikai portál AWB)
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ő (Model-View-Controller, 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

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

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

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

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

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

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

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

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

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

Windowson

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

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

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

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

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

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

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

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

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

Adatbázis-kezelé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

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

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

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

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

Licencek

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

  • Online dokumentáció a web2py honlapján, benne a web2py könyv teljes, naprakész anyaga, "szakácskönyv" (fél)készen alkalmazható kódrészletekkel, videók, interaktív példák, interaktív API kézikönyvvel, epydocs-szal (a teljes programkönyvtár kézikönyve), FAQ, puska, online eszközök stb.
  • A Web2py wikijét a web2py-jal készítették el.
  • A web2py-t bemutató diasorok.

Videók

Cikkek, könyvek

Háttér

Támogatá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

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

Történet és nevek

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

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:

Jegyzetek

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

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.