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

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 ismerA web2py sokféle adatátviteli protokollt ismer a v1.63 óta – 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;SOAP használata web2py-jal 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,A Wing IDE használata web2py-hoz 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ű weblapLegegyszerűbb weblap a web2py-jal: "Hello World" példa 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á.sablonok átalakítása web2py alá

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:Az OWASP szerint leggyakoribb 10 biztonsági probléma listája, és a web2py-ba épített megoldások ezek ellen Cross-site scripting (XSS): a web2py alapbeállításban minden változót helyettesítő karakterekkel jelenít meg a nézetekben, ezáltal megelőzi az XSS-t. Injection Flaws: a web2py adatbázis-absztrakciós rétege lehetetlenné teszi az SQL beszúrást. Malicious File Execution: a web2py csak a felfedett vezérlők végrehajtását engedi meg, ezáltal megakadályozza a fájlok rosszindulatú végrehajtását. Insecure Direct Object Reference: a web2py nem fed fel semmiféle belső objektumot, továbbá ellenőrzi minden URL érvényességét, ezáltal megelőzi a mappa-áthidaló támadásokat. Cross-site request forgery (CSRF): a web2py csak munkamenethez kötött sütiket használ és megelőzi a webes űrlapok ismételt elküldését, így kivédi a CSRF-et. Information Leakage and Improper Error Handling: eddig (2009. október 5-éig bezárólag) a web2py az egyetlen keretrendszer, amely beépített jegykezelő rendszert kínál. Broken Authentication and Session Management: a web2py-ban beépített mechanizmus kezeli a munkameneteket, és sütiben tárolja a munkamenet-azonosítót. Insecure Cryptographic Storage: a web2py alapbeállításban az MD5 algoritmussal hasítja a jelszavakat. Más algoritmusokat, például a HMAC-t is felkínálja ehhez. Insecure Communications: a web2py az Apache webszerverrel és az ahhoz fejlesztett mod ssl modullal használva erős titkosítást nyújt a kommunikációhoz. Failure to Restrict URL Access: a web2py az URL-eket függvényhívásokhoz rendeli hozzá. Mechanizmust nyújt annak meghatározásához, mely függvények publikusak, és melyik követel azonosítást, illetve jogosultság-ellenőrzést.

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 moduljaDisassembler a Python bájtkódhoz 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,a Cython leegyszerűsíti a C bővítőmodulok írását Pythonhoza Pyrexet a Python modulok készítésének segítésére fejlesztették ki, a szintaxisa nagyon hasonlít a Pythonéhoz 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, 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.Hogyan futtathatjuk a web2py-t Windows szolgáltatásként?

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.A web2py legfrissebb forráskódja az összes platformra 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, illetve a web2py-jal fejlesztett alkalmazások futtatásáról GAE-n.Web2py-jal fejlesztett alkalmazások futtatása GAE-n