- Как настроить веб-сервер Apache на запуск Python в Windows
- 1. Установите Python
- 2. Настройка Apache на запуск Python CGI
- 3. Перезапустите Apache
- 4. Запустите тестовую страницу Python
- HttpServer в качестве простого HTTP-сервера в Python
- Импорт модуля httpserver
- Запуск HTTP-сервера
- Подключение
- Запуск HttpServer, который обслуживает настраиваемый файл index.html
- CGI: пишем простой сайт на Python. Часть 1: Hello world
- Настройка локального сервера
- Hello world
- Python: реализуем веб-сервер своими руками
- Настройка сервера под Windows 10 для Python
Как настроить веб-сервер Apache на запуск Python в Windows
Скрипты Python можно запускать в окружении Apache аналогично запуску скриптов PHP. Для этого нужно сделать небольшую настройку.
Я устанавливал веб-сервер по этой инструкции, если вы устанавливали по другой инструкции, то отредактируйте пути под свои значения.
1. Установите Python
Если у вас ещё не установлен Python, то скачайте установщик здесь: https://www.python.org/downloads/windows/ (файл Windows x86-64 executable installer).
Я установил в предлагаемый путь, но также выбрал добавление папки с исполнимыми файлами Python в переменные окружения (возможно, это делать необязательно).
Забегая вперёд скажу — путь до папки с установленным Python нужно будет указывать в начале каждого Python cgi скрипта, поэтому или выберите более простую папку, куда вы устанавливаете Python, либо запомните имя путь до предложенной директории.
В конце программа установки предложила снять максимальное ограничение на длину пути — я согласился (возможно, это делать необязательно):
2. Настройка Apache на запуск Python CGI
Теперь откройте для редактирования файл httpd.conf, у меня он расположен по пути C:\Server\bin\Apache24\conf\httpd.conf.
Найдите там строку
и добавьте к ней ExecCGI. Должна получиться такая строка (ВНИМАНИЕ: набор опций у вас может быть другим):
Теперь найдите строку:
Раскомментируйте её, то есть удалите символ # в начале строки и добавьте к концу строки .py. Новая строка будет выглядеть примерно так:
3. Перезапустите Apache
4. Запустите тестовую страницу Python
В папке для ваших сайтов (у меня это C:\Server\data\htdocs\) создайте файл test.py и скопируйте в него:
Обратите внимание на самую верхнюю строку, то есть на C:\Users\Alex\AppData\Local\Programs\Python\Python37\python.exe — вам нужно заменить её на своё значение, указав путь до файла python.exe. Даже если вы выбрали предложенную по умолчанию папку, как минимум, вам нужно заменить имя пользователя Alex на имя своего пользователя.
ПРИМЕЧАНИЕ: обратите внимание, что путь до файла python.exe может различаться в зависимости от выбранной папки для установки, имени пользователя (если вы установили в C:\Users\), а также в зависимости от версии, например, это может быть папка Python39:
Отредактируйте самую верхнюю строку в соответствии с вашей установкой.
HttpServer в качестве простого HTTP-сервера в Python
Этот модуль служит очень быстрым и простым способом запустить локальный Http-сервер в вашей сети.
Ранее в Python 2.7 этот модуль назывался HttpServer . Но в Python3 этот модуль был объединен с модулем http.server . Давайте начнем и запустим наш собственный Http-сервер.
Импорт модуля httpserver
Этот модуль входит в состав стандартной библиотеки, поэтому устанавливать его не нужно. Чтобы импортировать этот модуль, просто используйте следующую инструкцию:
Теперь все готово к запуску сервера. Теперь давайте напишем немного кода для обслуживания файлов.
Запуск HTTP-сервера
Если вы просто хотите поделиться своими файлами и каталогами с другим пользователем, вы можете напрямую запустить сервер с помощью Python.
Перейдите в любой каталог, которым вы хотите поделиться, и запустите сервер оттуда, используя:
Здесь мы запускаем наш локальный Http-сервер на порту 9000.
Подключение
Теперь, чтобы подключиться к локальному серверу, необходимо проделать следующие шаги:
- Зайдите на сервер и узнайте IP-адрес сервера с помощью arp -a в Windows или ip -a | grep inet в Linux.
- На удаленном клиенте просто введите http://IP_ADDRESS:9000/ в своем браузере.
Обратите внимание, что вы можете просмотреть файлы сервера или даже загрузить их на клиентскую машину.
Запуск HttpServer, который обслуживает настраиваемый файл index.html
Хотя сервер по умолчанию удобен для прямого обмена файлами, вы можете настроить сервер, запустив отдельный файл.
Например, мы будем запускать собственный Http-сервер, который использует http.server и socketserver для связи TCP.
MyHttpRequestHandler вызывает метод do_GET() для обслуживания запроса. Чтобы обслужить пользовательский файл для запроса, мы можем переопределить функцию, просто определив другой метод do_GET(), который возвращает другое значение.
CGI: пишем простой сайт на Python. Часть 1: Hello world
Проще всего создать динамические страницы на Python при помощи CGI-скриптов. CGI-скрипты — это исполняемые файлы, которые выполняются веб-сервером, когда в URL запрашивается соответствующий скрипт.
Сегодня я расскажу про то, как написать Hello world, как CGI-скрипт.
Настройка локального сервера
В Python уже есть встроенный CGI сервер, поэтому его настройка элементарна.
Для запуска из консоли (для любителей linux-систем). Запускать нужно из той папки, где мы хотим работать:
Для сидящих на Windows чуть проще будет запуск Python файла (заметьте, что он должен находиться в той же папке, в которой мы планируем работать!):
Теперь откройте браузер и в адресной строке наберите localhost:8000
Если у вас примерно такая же картина, значит, у вас все заработало!
Hello world
Теперь в той папке, где мы запустили сервер, создаём папку cgi-bin (у меня она уже создана).
В этой папке создаём скрипт hello.py со следующим содержимым:
Первая строка говорит о том, что это Python скрипт (CGI-скрипты можно не только на Python писать).
Вторая строка печатает заголовок. Он обозначает, что это будет html файл (бывает ещё css, javascript, pdf и куча других, и браузер различает их по заголовкам).
Третья строка (просто символ новой строки) отделяет заголовки от тела ответа.
Четвёртая печатает Hello world.
Теперь переходим на localhost:8000/cgi-bin/hello.py
Если у вас не работает, проверьте, установлены ли права на выполнение.
Также в консоли запущенного сервера появляются сообщения об ошибках. Например, убрал скобочку и обновил страницу:
В следующей части мы рассмотрим обработку данных форм и cookies.
Python: реализуем веб-сервер своими руками
Intro
Пакет http
Как выяснилось, сам интерпретатор уже имеет в своем составе пакет http, в котором сосредоточены все функции работы с этим протоколом: как серверные, так и клиентские, в виде отдельных модулей. Так как мы пишем сервер, то нас в первую очередь интересует модуль, отвечающий именно за функции обслуживания http-запросов: в Python 3 они объединены в один модуль под названием http.server, в Python 2 эти функции разнесены по трем модулям: BaseHTTPServer, CGIHTTPServer и SimpleHTTPServer.
Обработчик запросов: BaseHTTPRequestHandler
Для реализации простого сервера будет достаточно использовать «класс-заготовку» — BaseHTTPRequestHandler. Этот класс может использоваться как базовый для реализации собственного обработчика запросов, действующего в составе сервера HTTP. После того как клиент установит соединение и HTTP-заголовки его запроса будут проанализированы, выполняется попытка вызвать метод вида do_REQUEST, имя которого определяется исходя из типа запроса: для обработки GET-запроса типа будет вызван метод do_GET(), для обработки POST-запроса – метод do_POST() и так далее. По умолчанию этот класс ничего не делает, и предполагается, что эти методы должны быть переопределены в подклассах. В простейшем случае требуется реализовать лишь метод do_GET():
from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
class HttpProcessor(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header(‘content-type’,’text/html’)
self.end_headers()
self.wfile.write(«hello !»)
Теперь необходимо создать объект класса HTTPServer, передав ему в качестве параметров IP-адрес и порт, на котором будет работать http-сервер, а также наш класс-потомок BaseHTTPRequestHandler, который собственно и будет отвечать за обработку запросов к серверу:
serv = HTTPServer((«localhost»,80),HttpProcessor)
serv.serve_forever()
Первой строкой мы создаем экземпляр HTTPServer, указывая ему, по какому адресу и с помощью чего обрабатывать наши http-запросы, затем, вызовом метода serve_forever(), мы указываем интерпретатору перманентно запустить веб-сервер — приложение будет работать до тех пор, пока его работа не будет прервана путем нашего вмешательства. Убедиться в его работоспособности можно, обратившись через браузер по тому адресу, который мы забиндили при написании скрипта: нашему взору предстанет веб-страница с единственной фразой — «hello».
Как это работает
Для ясности, рассмотрим текст метода do_GET():
Перво-наперво, при успешном соединении, необходимо отправить браузеру код ответа -информацию о том, что запрашиваемая страница была обнаружена (код 200: HTTP/ok):
Затем необходимо отправить http-заголовки, для чего используется метод send_header(), а также эскейп-посдедовательность (\r\n\r\n), которая свидетельствует о завершении заголовка ответа:
Так как мы установили в заголовках тип содержимого ответа: Content-type: text/html, то весь текст, выведенный нашим методом do_GET(), будет интерпретирован клиентом как HTML-разметка. Также следует обратить внимание на атрибут wfile класса BaseHTTPRequestHandler
. Он представляет собой объект, который реализует поток сервера, транслируемый на клиент. Любой вывод в браузер осуществляется методом wfile.write(‘something’).
В заключение
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Настройка сервера под Windows 10 для Python
Некоторое время тому назад я начал читать книгу Нейтана Яу. Искусство визуализации в бизнесе. Я думал усовершенствовать свои знания Excel, но оказалось, что автор больше ориентирован не на Excel, а на программирование, и его любимым языком является Python. Решив немного больше узнать об этом языке, я взялся за книгу Майка МакГрата Программирование на Python для начинающих. В одной из глав Майк предложил запустить web-сервер на локальном ПК и сконфигурировать его для интерпретации скриптов на Python. С ходу у меня это не получилось, и помощи от форумчан также не дождался. Выручили коллеги по работе. Один рекомендовал материал на форуме Stack Overflow, а второй помог, когда возникли проблемы. Итак…
Кликните правой кнопкой мыши на меню Пуск, и выберите Программы и компоненты –> Включение или отключение компонентов Windows. В открывшемся окне раскройте строку Службы IIS, и поставьте галочки напротив Службы Интернета. Убедитесь, что интерфейс CGI включен (рис. 1). Включите также Консоль управления ISS (рис. 2). Нажмите Ok. Windows применит изменения. Это может занять несколько минут.
Рис. 1. Подключение CGI
Скачать заметку в формате Word или pdf
Рис. 2. Включение консоли управления IIS
Скачайте программу Python с python.org. Я установил версию Python 3.5.1 с помощью Windows x86-64 web-based installer. Убедитесь, что вы установили версию x64, если у вас 64-разрядная версия Windows.
Разместите файлы-скрипты Python в рабочей папке, например, С:\MyScripts.
Установите разрешения на файлы в каталоге С:\MyScripts чтобы разрешить IIS читать и исполнять файлы. Для этого пройдите по меню Пуск –> Командная строка (администратор) и выполните три команды:
chdir С:\MyScripts
icacls . /grant » NT AUTHORITY\IUSR:(OI)(CI)(RX) »
icacls . /grant » Builtin\IIS_IUSRS:(OI)(CI)(RX) «
Откройте диспетчер служб IIS: Пуск –> Панель управления –> Система и безопасность –> Администрирование –> Диспетчер служб IIS. В левой части окна кликните правой кнопкой мыши на Default Web Site, и выберите Добавить приложение (рис. 4).
Рис. 4. Добавить приложение
Укажите виртуальный путь как /py и физический путь к файлам (рис. 5).
Рис. 5. Настройки нового приложения
В диспетчере служб IIS, добавьте сопоставление сценария для *.ру, и программы python.exe. Кликните на пиктограмме Сопоставление разработчиков (рис. 6).
Рис. 6. Сопоставление разработчиков
Выберите действие (в правой части окна) – Добавить сопоставление сценария. Настройте новый сценарий (рис. 7).
Рис. 7. Добавить сопоставление сценария
Настройте физическую папку Default Web Site (web-сайта по умолчанию, рис. 8). Теперь при наборе в web-браузере адреса localhost, будем попадать не в папку по умолчанию – С:\inetpub\wwwroot, а в папку C:\MyScripts.
Рис. 8. Изменение физической папки, открываемой при наборе в браузере адреса localhost; чтобы увеличить картинку, кликните на ней правой кнопкой мыши и выберите опцию Открыть картинку в новой вкладке
Для удобства работы с локальным web-сервером добавьте возможность видеть содержимое папок. Запустите Диспетчер служб IIS и откройте пиктограмму Просмотр каталога (рис. 9).
Рис. 9. Просмотр каталога
Кликните в правой части окна Включить (рис. 10).
Рис. 10. Включить опцию Просмотр каталога
Теперь, если вы в браузере наберете localhost, то увидите содержимое папки С:\MyScripts (рис. 11).
Рис. 11. Содержимое папки С:\MyScripts, наблюдаемое через web-браузер