Table of Contents
Hoofdpagina/Mod python
Op de usersites staat mod_python geinstalleerd. Om deze te kunnen gebruiken zijn er enkele stappen nodig:
.htaccess
Mod_python in de puurste vorm (lees: niet psp) werkt niet volgens het model van PHP. Basically routen we alle requests van apache naar een zelfgemaakte python-applicatie, die verder de request afhandelt. Hiervoor moeten we eerst een .htaccess aanmaken om Apache te zeggen welke applicatie dit nu precies is. Maak in je public_html een directory aan, bv “python”, en zet daar volgend .htaccess bestand:
AddHandler mod_python .py PythonHandler test PythonDebug On
Eventueel kan je volgend .htaccess bestand gebruiken zodat alle requests die langs deze directory gaan opgevangen worden door onze python applicatie, dus zonder dat het een request naar een .py bestand moet zijn:
SetHandler mod_python PythonHandler test PythonDebug On
Python Code
Maak vervolgens een test.py bestand in die directory aan. Dit is het python applicatie die de requests zal afhandelen. Als test kan je daar volgende code in smijten:
from mod_python import apache def handler(req): req.content_type = "text/html" req.write("Helloooooo world, I'm PYTHON! Also, Relix ROX") return apache.OK
Bewaar, en ga vervolgens naar http://endymion.ugent.be/~user/python/bla.py (remember: alle requests in python/ die eindigen met een extensie .py zal worden geroute naar onze test.py applicatie. Met meer geavanceerdere apache-conf shizzle kan je dit wellicht aanpassen).
Werkend Voorbeeld: Autogallerij
Relix heeft een klein voorbeeldje opgezet om te tonen wat je er allemaal mee kan doen. De bedoeling is dat je een standaard apache-index pagina meegeeft met de request, waarna de app deze aanpast zodat je thumbnails van de fototjes ziet. Je kan het uitproberen op http://endymion.ugent.be/~relix/autogallery/, maar je moet er dus wel een index bij geven, bijvoorbeeld http://endymion.ugent.be/~relix/autogallery/http://code31.lahaag.org/jpeg/ (van random google op “index of jpeg”)
import cgitb; cgitb.enable() # Detailed exception handler from mod_python import apache # Import req etc. import cgi # CGI shizzle from urllib import urlopen from BeautifulSoup import BeautifulSoup, Tag from urlparse import urlparse from mimetypes import guess_type def handler(req): # Get resource indexURL = urlparse(req.uri)[[2]] indexURL = indexURL[[indexURL.find("http"):]] # Check if it's a HTML index or an image indexContentType = guess_type(indexURL)[[0]] # Download it indexContent = urlopen(indexURL) if indexContentType == None: req.content_type = "text/html" # Parse it indexSoup = BeautifulSoup(indexContent) # Retrieve all images imageTags = indexSoup.findAll("img", src="/icons/image2.gif") for imageTag in imageTags: imageAnchor = imageTag.findNextSibling('a') imageAnchor[['href']] = indexURL + imageAnchor[['href']] imageTag = Tag(indexSoup, "img", [[("src",|imageAnchor['href']]),("width","200px")]) imageAnchor.next.replaceWith(imageTag) req.write(indexSoup.renderContents()) return apache.OK
Meer Info
Check wat je nog allemaal kan doen op de mod_python documentatie: http://www.modpython.org/live/current/doc-html/
Toekomst
<ab3> iets als web.py zou leuk zijn, om te hebben