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

Print/export
Nuttige links