====== Hoofdpagina/Mod python ======
{{tag>"Prutsen" }}
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 =====
iets als web.py zou leuk zijn, om te hebben