Jag har dom senaste 5 åren jobbat med ett ramverk för webbapplikationer om heter Zope, det är ett komplext och kompetent system med många fiffiga finesser och allt man behöver är inkluderat (webbserver, scriptspråk, transkationsserver, databas, säkerhet med mera).
På senare tid har en ny generation (den tredje generationen) Zope 3 av Zope växt fram och efter att ha bråkat med Zope 3 större del av hösten kan jag nu lägga den på hylla (eftersom uppdraget är där Zope 3 användes är slut).
Men det goda i det hela är att jag börjat omvärdera hur lämpligt Zope är för att lösa alla tänkbara problem. Även om jag fortfarande anser att Zope är extremt lämpligt för webbpubliceringsapplikationer som CMS, e-handel, Intranet och portaler är det inte alltid det bästa verktyget för jobbet. Faktum är att jag många gånger misslyckats med Zope, egentligen lika många gånger som jag lyckats.
Zope 3 är visserligen mycket renare än in föregångare (Zope 2) och det innebär att det både
är enklare att lyfta in externa lösningar in i Zope 3 och att Zope 3's komponenter enklare
kan återanvändas utanför Zope 3. Men Zope 3 dikterar fortfarande, och kanske till och med
i större utsträckning än Zope 2, hur man skall designa sin webbapplikationer.
Enter CherryPy (vilket är den första i en trolig rad av Python baserade webbapplikationer ramverk som jag nu kommer att titta på för ett framtida spel projekt).
CherryPy har inte hälften av alla bells&whistles som Zope plattformen erbjuder, det mest
signifikanta är troligen avsaknaden av säkerhetssystem men det är en enkelt och strait forvard sätta att bygga webbapplikationer.
Enkelt beskriver kan man säga att man skapar klasser som man sedan instantierar och till delar
till en objekthierarki med start i cherrypy.root. Objekten metoder kan publicerar till webben genom antingen en dekorator eller att man tilldelar variabeln published=True på "metoden" (man kan göra sånt i Python eftersom funktioner och metoder är objekt).
Tre metoder kan användas som "default" metod, index(*arg, **kw), default(*arg, *kw), och __call__.
Det normala är att använda index eller default där index har företräde framför default.
Skillnaden mellan dom båda är att argumenten för index fås från webb requesten, medan argumenten för default är en kombination av webb request variabler och ej matchade URL element.
Exempel:
URL Anrop/ root.index()
/?hello=world root.index(**kw={'hello':'world'})
/hello/kitten root.default(*arg=('hello', kitten')
/hello/kitten?hello=world root.default(*arg=('hello', kitten', **kw={'hello':'world'})Hänger du med, läs CherryPys tutorial, dom förklarar det bättre.
CherryPy saknar skriptspråk eller snarare är skriptspråk agnostisk, vilket passar mig fin fint eftersom jag troligen vill skapa mitt eget skriptspråk (en variant av Zopes TAL språk).
CherryPy erbjuder inte så mycket mer, en inbyggd webserver som inte verkar speciellt imponerande, en filter funktion för att patcha in låg nivå hantering av request och response, en väldigt medioker konfigurerings funktion baserat på Pythons inbyggda .ini parser (men den räcker till väldigt bra för mina mål, man kan jämföra den med Zope3s mastodont konfigureringsspråk).
En sak jag är glad att CherryPy har out-of-the-box är sessions hantering, den är naturligtvis inte lika komplicerad som Zopes (duh!) men räcker troligen till för att hålla en cache av session
data för en användare.
Som jag nämde ovan saknar CherryPy ett system för säkerhet, visserligen har dom ett system för att publicera objekt och metoder (default är att metoder inte är accessbara från webben) men det finns inget system att hantera användare/grupper och inget system för rättigheter/roller.
Om jag väljer att gå vidare med CherryPy är det första jag kommer försöka göra att integrera
Zope 3's zope.security med CherryPy så jag kan definera åtkomsträttigheter.
Nästa ramverk för granskning blir django...
Vi hörs!