Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

Классический путь создания приложений для WWW — написание CGI–сценариев (иногда говорят — скриптов). CGI (Common Gateway Interface, общий шлюзовой интерфейс) - это стандарт, регламентирующий взаимодействие сервера с внешними приложениями. В случае с WWW, web–сервер может направить запрос на генерацию страницы по определенному сценарию. Этот сценарий, получив на вход данные от web–сервера (тот, в свою очередь, мог получить их от пользователя), генерирует готовый объект (изображение, аудиоданные, таблицу стилей и т.п.).

При вызове сценария Web–сервер передает ему информацию через стандартный ввод, переменные окружения и, для ISINDEX, через аргументы командной строки (они доступны через sys.argv).

Два основных метода передачи данных из заполненной в браузере формы Web–серверу (и CGI–сценарию) - GET и POST. В зависимости от метода данные передаются по–разному. В первом случае они кодируются и помещаются прямо в URL, например:Сценарий получает их в переменной окружения с именем QUERY_STRING. В случае метода POST они передаются на стандартный ввод.

Для корректной работы сценарии помещаются в предназначенный для этого каталог на web–сервере (обычно он называется cgi–bin) или, если это разрешено конфигурацией сервера, в любом месте среди документов HTML. Сценарий должен иметь признак исполняемости. В системе Unix его можно установить с помощью команды chmod a+x.

Следующий простейший сценарий выводит значения из словаря os.environ и позволяет увидеть, что же было ему передано:

Листинг

#!/usr/bin/python

import os

print ""«Content–Type: text/plain

%s»"" % os.environ

С помощью него можно увидеть установленные Web–сервером переменные окружения. Выдаваемый CGI–сценарием web–серверу файл содержит заголовочную часть, в которой указаны поля с мета–информацией (тип содержимого, время последнего обновления документа, кодировка и т.п.).

Основные переменные окружения, достаточные для создания сценариев:

Листинг

QUERY_STRING

Строка запроса.

Листинг

REMOTE_ADDR

IP–адрес клиента.

Листинг

REMOTE_USER

Имя клиента (если он был идентифицирован).

Листинг

SCRIPT_NAME

Имя сценария.

Листинг

SCRIPT_FILENAME

Имя файла со сценарием.

Листинг

SERVER_NAME

Имя сервера.

Листинг

HTTP_USER_AGENT

Название броузера клиента.

Листинг

REQUEST_URI

Строка запроса (URI).

Листинг

HTTP_USER_AGENT

Имя сервера.

Листинг

HTTP_ACCEPT_LANGUAGE

Желательный язык документа.

Вот что может содержать словарь os.environ в CGI–сценарии:

Листинг

{

'DOCUMENT_ROOT': '/var/www/html',

'SERVER_ADDR': '127.0.0.1',

'SERVER_PORT': '80',

'GATEWAY_INTERFACE': 'CGI/1.1',

'HTTP_ACCEPT_LANGUAGE': 'en–us, en;q=0.50',

'REMOTE_ADDR': '127.0.0.1',

'SERVER_NAME': 'rnd.onego.ru',

'HTTP_CONNECTION': 'close',

'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; U; Linux i586; en–US;

rv:1.0.1) Gecko/20021003',

'HTTP_ACCEPT_CHARSET': 'ISO–8859–1, utf–8;q=0.66, *;q=0.66',

'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,

text/html;q=0.9,text/plain;q=0.8,video/x–mng,image/png,image/jpeg,

image/gif;q=0.2,text/css,*/*;q=0.1',

'REQUEST_URI': '/cgi–bin/test.py?a=1',

'PATH': '/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin',

'QUERY_STRING': 'a=1&b=2',

'SCRIPT_FILENAME': '/var/www/cgi–bin/test.py',

'HTTP_KEEP_ALIVE': '300',

'HTTP_HOST': 'localhost',

'REQUEST_METHOD': 'GET',

'SERVER_SIGNATURE': 'Apache/1.3.23 Server at rnd.onego.ru Port 80',

'SCRIPT_NAME': '/cgi–bin/test.py',

'SERVER_ADMIN': 'root@localhost',

'SERVER_SOFTWARE': 'Apache/1.3.23 (Unix) (Red–Hat/Linux)

mod_python/2.7.8 Python/1.5.2 PHP/4.1.2',

'SERVER_PROTOCOL': 'HTTP/1.0',

'REMOTE_PORT': '39251'

}

Следующий CGI–сценарий выдает черный квадрат (в нем используется модуль Image для обработки изображений):

Листинг

#!/usr/bin/python

import sys

print ""«Content–Type: image/jpeg

"""

import Image

i = Image.new(«RGB», (10,10))

i.im.draw_rectangle((0,0,10,10), 1)

i.save(sys.stdout, «jpeg»)

Модуль cgi

В Python имеется поддержка CGI в виде модуля cgi. Следующий пример показывает некоторые из его возможностей:

Листинг

#!/usr/bin/python

# -*- coding: cp1251 -*-import cgi, os

# анализ запроса

f = cgi.FieldStorage

if f.has_key(«a»):

a = f[«a»].value

else:

a = «0»

# обработка запроса

b = str(int(a)+1)

mytext = open(os.environ[«SCRIPT_FILENAME»]).read

mytext_html = cgi.escape(mytext)

# формирование ответа

print ""«Content–Type: text/html

<html><head><title>Решение примера: %(b)s = %(a)s + 1</title></head>

<body>

%(b)s

Поделиться:
Популярные книги

На границе империй. Том 8

INDIGO
12. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

Виконт. Книга 3. Знамена Легиона

Юллем Евгений
3. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Виконт. Книга 3. Знамена Легиона

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Князь Барбашин 3

Родин Дмитрий Михайлович
3. Князь Барбашев
Фантастика:
героическая фантастика
альтернативная история
5.00
рейтинг книги
Князь Барбашин 3

Последний попаданец

Зубов Константин
1. Последний попаданец
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Последний попаданец

Локки 11. Потомок бога

Решетов Евгений Валерьевич
11. Локки
Фантастика:
героическая фантастика
боевая фантастика
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Локки 11. Потомок бога

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Огненный князь 2

Машуков Тимур
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 2

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Кодекс Охотника. Книга XXXV

Винокуров Юрий
35. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXXV

Сержант. Назад в СССР. Книга 4

Гаусс Максим
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сержант. Назад в СССР. Книга 4