Vandaag geen RELOAD bericht, maar een voorbeeld van hoe een andere applicatie op een slimme (en in het begin wat complexe) manier zijn bestanden bij elkaar zoekt. Oftwel: Acquisitie binnen Zope.
Op onze harde schijf en ook bij het gebruik van internet via de browser zijn we inmiddels redelijk gewend geraakt aan het principe dat je heel precies moet weten waar een bestand staat. Anders kun je het niet tonen. Dat wordt vervelend op het moment dat je van het ene bestand naar het andere wilt verwijzen. Als je dan namelijk een van de twee bestanden verplaatst wil het nog wel eens voorkomen dat de link niet meer werkt.
Zope, is een applicatie-ontwikkelplatform voor webbased applicaties. Dat is niet hetzelfde als een ontwikkelplatform voor websites!
De kracht van Zope zit hem in het feit dat je, gratis, een groot aantal basisfunctionaliteiten ter beschikking krijgt op het moment dat je een applicatie gaat bouwen in Python. Ten eerste natuurlijk, zoals al gezegd, het feit dat de applicatie via een browser te benaderen is. Niet echt revolutionair, maar er is meer. Zo levert Zope verschillende manieren van gebruikers-authenticatie (bijvoorbeeld op basis van een tabel in een database, NT, LDAP, …). Als applicatie-ontwikkelaar zie je de bijbehorende complexiteit niet. Jouw applicatie kan met al die manieren overweg. Datzelfde geldt voor de achterliggende database waar de objecten in worden opgeslagen. Dat kan gewoon de filebased versie zijn waar Zope standaard op draait. maar ook een databaseserver naar wens. Ook hier zit de complexiteit verborgen op een niveau dat je niet snel zult vinden. Bij webbased applicaties hoort natuurlijk een scripting- en template-taal die het mogelijk maakt snel en flexibel de interfaces te bouwen. Tenslotte, is een sterk punt dat Zope daadwerkelijk objectgeorienteerd te werk gaat, d.w.z. alles wat je toevoegd is een object. Dus ook de mappen (folders) die je aanmaakt. Nou en? zul je zeggen. Nou dat betekent ook dat zo’n map bijvoorbeeld properties heeft, dat je verschillende views op de map kunt maken en aan de bijbehorende (zelf aan te passen) tabbladen kunt hangen. Het maakt Zope allemaal niets uit.
Goed, acquisitie dan. Allereerst: leren werken met Zope vergt iets meer inspanning en uitleg dan dat ik hier tijd voor heb. Mijn doel is ook slechts om het principe te illustreren.
Stel je heb deze mappenstructuur in Zope.
In de mappen Niek en Marit staan afbeeldingen die je wilt tonen.
Het aanroepen van een map gaat op gelijke wijze als bij andere websites, in dit geval type ik in: http://localhost:8080/AcquisitieDemo/Scripts/Fotos/Kinderen/Niek/ en krijg dit te zien: klik voor afbeelding.
In plaats van een lijst van de bestanden krijg je een pagina te zien. Hoe kan dat? Natuurlijk, ook ander webservers kennen het principe van een standaardpagina die getoond wordt als je geen naam van een pagina opgeeft. Maar in deze map staat helemaal geen HTML bestand. Als je kijkt naar de tekst op de pagina zelf, zie je waar deze pagina vandaan komt: http://localhost:8080/AcquisitieDemo/index_html. index_html is vergelijkbaar met index.htm of default.asp op andere webservers. Het bestand dat je nu ziet staat niet in de map Niek, maar een paar mappen hoger in de mappenstructuur. Hier heb je al het eerste voorbeeld van overerving. De map (het object) Niek heeft de methode index_html (toon de defaultpagina) overgeorven van een van zijn achtergrootouders.
Het principe zit als volgt in elkaar: Laten we eerst eens kijken naar de URL: /AcquisitieDemo/Fotos/Kinderen/Niek. Omdat ik die ingevoerd heb start Zope in de root en zoekt naar een object met de naam AcquisitieDemo, in dit geval wordt dat object gevonden, dus zoekt Zope daarbinnen naar een object met de naam Fotos (ook gevonden), dan naar Kinderen (ook gevonden) en naar Niek (ook gevonden). Omdat er geen aktie voor het object Niek gegeven staat, zoek Zope naar ‘index_html’ (de standaard aktie is dus uitvoeren van die pagina). Die wordt niet gevonden. Dan zoekt Zope in de ouder van Niek (Kinderen). In dit geval staat ook daar geen index_html, dus zoekt Zope in de grootouder van Niet (Fotos), ook hier geen index_html, dus verder naar AcquisitieDemo. Daar staat wél een index_html, dus die wordt gebruikt. Wil je dat niet, nou dan maak je gewoon een index_html aan in het object Niek, en dan wordt die gebruikt.
Maar dat is nog niet alles, morgen deel 2