Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Р.Сузи. Спецкурс "Язык Python и его приложения"

Практическое занятие 3. Создание CGI-скрипта

Создайте каталог /home/USER/public_html и подкаталог cgi-bin:

$ mkdir ~/public_html
$ mkdir ~/public_html/cgi-bin 
$ chmod 711 ~ ~/public_html ~/public_html/cgi-bin

Все CGI-скрипты необходимо располагать в каталоге ~/public_html/cgi-bin и они должны иметь расширение cgi (так был настроен web-сервер).

Для начала - простейший скрипт, показывающий всю получаемую информацию (test.cgi):

#!/usr/bin/python

import os, sys

stdin = sys.stdin.read()
argv = sys.argv
environ = os.environ

print """Content-type: text/html

os.environ:
%(environ)s

sys.stdin...:
%(stdin)s

sys.argv:
%(argv)s
""" % vars()

Более сложный пример - вывод календаря (cal.cgi):

#!/usr/bin/python
import cgi, calendar, string

form = cgi.FieldStorage()

# если данные формы введены
if form.has_key("month") and form.has_key("year"):
  # проверяем данные, введенные пользователем
  form_ok = 0
  try:
    month = int(form["month"].value)
    year = int(form["year"].value)
    if 1 <= month <= 12 and 1970 <= year <= 2037:
      form_ok = 1
  except:
    pass
  if form_ok:
    # формирируем HTML-таблицу с календарем
    month_cal = calendar.monthcalendar(year, month)
    table = ["""%s.%s""" % (month, year),
             """"""]
    for week in month_cal:
      table.append("""\n""")
      for day in week:
        table.append("""""" % (day or " "))
      table.append("""""")
    table.append("""
%s
""") message = string.join(table, "") else: message = """Ошибка!""" else: message = "" # выводим HTML-страницу print """Content-Type: text/html <HTML><HEAD><TITLE>Календарь</TITLE></HEAD> <BODY><H1>Календарь</H1><P>%s <P><FORM ACTION="cal.cgi" METHOD="GET"> Введите: <br>Месяц: <INPUT SIZE=2 TYPE="text" NAME="month"> <br>Год: <INPUT SIZE=4 TYPE="text" NAME="year"> <br><INPUT TYPE="submit" NAME="b" VALUE="Календарь"> </FORM> </BODY></HTML>""" % message

Пример с загрузкой файла (upload.cgi):

#!/usr/bin/env python
import cgi

form = cgi.FieldStorage()
filename = contents = "Файл не загружен"
try:
  fileitem = form["myfile"]
  if fileitem.file:  
    # если файл, читаем содержимое файла целиком
    contents = "\n
%s
" % fileitem.file.read() filename = str(fileitem.filename) except: pass print """Content-Type: text/html Прием файла

Прием файла

Имя файла: %(filename)s

%(contents)s


Файл:
""" % vars()