Vraag Hoe gebruik ik Python met apache2?


Ik probeer Python te laten werken met Apache, maar ik slaag er niet in om succes te hebben met CGI of mod_python.

Weet iemand een goede tutorial of zoiets?

Bedankt.


14
2018-03-05 19:46


oorsprong




antwoorden:


mod_python is in principe niet onderhouden - je zou moeten kijken mod_wsgi. Installeer het pakket libapache2-mod-wsgi, dan uitgeven sudo a2enmod wsgi om het in te schakelen.

Net als een snel voorbeeld om het te laten draaien, vult u zoiets als dit in uw /etc/apache2/sites-enabled/default:

WSGIScriptAlias /test /path/to/python/file.py

En in het bestand /path/to/python/file.py:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return "Hello World"

Na het opnieuw starten van Apache2, een verzoek aan /test zal veranderen in een oproep van application() in je python-bestand.

Lees voor meer informatie naar WSGI (WebServer Gateway Interface), de manier waarop Python integreert met web-servers.

Bonus / update:

Python (niet verrassend) heeft een kleine WSGI-server in de standaardbibliotheek voor testen. Als u dit onderaan uw bestand toevoegt, kunt u het als een oud uitvoerbaar bestand voor testdoeleinden uitvoeren en vervolgens Apache laten overnemen voor productie:

if __name__ == '__main__':
    from wsgiref.simple_server import make_server

    httpd = make_server('', 8080, application)
    print "Serving on http://localhost:8080"

    httpd.serve_forever()

17
2018-03-05 20:51



Ik kreeg het volgende als een fout uit het apache-logboek. Voor zover ik weet, denkt het dat het geen touwtje krijgt. - Vallery
[Sat 05 maart 17:06:14 2011] [error] [client 127.0.0.1] mod_wsgi (pid = 2844): Uitzondering opgetreden bij het verwerken van het WSGI-script '/var/www/file.py'. [Sat 05 maart 17:06:14 2011] [fout] [client 127.0.0.1] Traceback (meest recente oproep laatste): [za maart 05 17:06:14 2011] [fout] [client 127.0.0.1] bestand " /var/www/file.py ", regel 2, in toepassing [za maart 05 17:06:14 2011] [fout] [client 127.0.0.1] start_response (200, [('Inhoudstype', 'tekst / plain ')]) [Sat 05 maart 17:06:14 2011] [error] [client 127.0.0.1] TypeError: verwacht byte string object voor status, waarde van het type int gevonden - Vallery
Ah. Mijn fout. Ik ben gewend aan frameworks die alle lastige dingen voor me doen;). Ik heb de 200 naar '200 OK' per python.org/dev/peps/pep-0333 - Morten Siebuhr
Geweldig, dat werkt. Laatste vraag: hoe laat ik het in html weergeven? Mijn browser toont de return in platte tekst en negeert de markup. - Vallery
Wacht, heb het: verander text / plain naar text / html. - Vallery