Як я можу використовувати Python з apache2?


13

Я намагаюся змусити Python працювати з Apache, однак я не маю успіху з CGI або mod_python.

Хтось знає хороший підручник чи щось таке?

Спасибі.

Відповіді:


17

mod_pythonв основному не підтримується - вам слід заглянути mod_wsgi. Встановіть пакет libapache2-mod-wsgi, потім видайте його, sudo a2enmod wsgiщоб увімкнути його.

Як короткий приклад для запуску, введіть щось подібне у своє /etc/apache2/sites-enabled/default:

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

І у файлі /path/to/python/file.py:

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

Після повторного запуску Apache2 будь-який запит /testперетвориться на виклик application()у вашому файлі python.

Для подальшого читання ознайомтеся з WSGI (WebServer Gateway Interface), яким чином Python інтегрується з веб-серверами.

Бонус / оновлення:

У Python (не дивно) є невеликий сервер WSGI у стандартній бібліотеці для тестування. Якщо ви додасте це в нижній частині файлу, ви можете запустити його як будь-який старий виконуваний файл для тестування, а потім дозволити Apache взяти на себе виробництво:

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

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

    httpd.serve_forever()

Як помилку я вийшов із журналу apache. Наскільки я можу сказати, він вважає, що це не отримує рядок.
Vallery

[Сб. Березень 05 17:06:14 2011] [помилка] [клієнт 127.0.0.1] mod_wsgi (pid = 2844): виняток стався при обробці сценарію WSGI '/var/www/file.py'. [Сб. Березень 05 17:06:14 2011] [помилка] [Клієнт 127.0.0.1] Відстеження (останній дзвінок останній): [Сб. Березень 05 17:06:14 2011] [Помилка] [клієнт 127.0.0.1] Файл " /var/www/file.py ", рядок 2, у додатку [Sat Mar 05 17:06:14 2011] [помилка] [client 127.0.0.1] start_response (200, [('Content-Type', 'text / / звичайний ')]) [Сб. березня 05 17:06:14 2011] [помилка] [клієнт 127.0.0.1] TypeError: очікуваний об'єкт байтового рядка для статусу, значення типу знайдено int
Vallery

Ага. Моє ліжко. Я звик до фреймворків, які роблять усі хитрі речі для мене;). Я оновив 200до '200 OK'за python.org/dev/peps/pep-0333
Morten Siebuhr

Чудово, що працює. Останнє питання: як зробити так, щоб він відображався в html? Мій браузер показує повернення в простому тексті, ігноруючи розмітку.
Валерія

1
Зачекайте, зрозуміло: змініть текст / звичайний текст на текст / html.
Vallery
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.