Главная страница
Навигация по странице:

  • Модуль http.cookies (Cookie)

  • Переменная Описание

  • справочник по Python. мм isbn 9785932861578 9 785932 861578


    Скачать 4.21 Mb.
    Названиемм isbn 9785932861578 9 785932 861578
    Анкорсправочник по Python
    Дата08.05.2022
    Размер4.21 Mb.
    Формат файлаpdf
    Имя файлаBizli_Python-Podrobnyy-spravochnik.440222.pdf
    ТипСправочник
    #518195
    страница56 из 82
    1   ...   52   53   54   55   56   57   58   59   ...   82

    Ошибка!


    Код: %(code)d.
    Текст: %(message)s.
    Описание: %(code)s = %(explain)s.

    634
    Глава 22. Разработка интернет-приложений в журнал вызывается метод log_error(). Этот метод создает законченный ответ с сообщением об ошибке, используя строку формата в атрибуте клас- са error_message_format, и отправляет ее клиенту. Затем он закрывает соеди- он закрывает соеди- он закрывает соеди- закрывает соеди- закрывает соеди- соеди- соеди- нение. После вызова этого метода не должно выполняться никаких других операций.
    b.send_response(code [, message])
    Отправляет ответ в случае успешной обработки запроса. Отправляет стро- стро- стро- ку с ответом HTTP, за которой следуют заголовки Server и Date. В аргумен-
    В аргумен- аргумен- аргумен- те code передается числовой код ответа HTTP, а в аргументе message – до- до- полнительное сообщение. Для записи запроса в журнал вызывается метод log_request()
    b.send_header(keyword, value)
    Выводит заголовок HTTP в выходной поток. В аргументе keyword переда- ется имя заголовка, а в аргументе value – его значение. Этот метод должен вызываться только после вызова метода send_response().
    b.end_headers()
    Отправляет пустую строку, как признак окончания последовательности заголовков HTTP.
    b.log_request([code [, size]])
    Записывает в журнал успешно обработанный запрос. В аргументе code пе- редается код HTTP, а в аргументе size – размер ответа в байтах (если досту- пен). По умолчанию для журналирования вызывает метод log_message().
    b.log_error(format, ...)
    Записывает в журнал сообщение об ошибке. По умолчанию для журнали- рования вызывает метод log_message().
    b.log_message(format, ...)
    Выводит любые сообщения в поток sys.stderr. В аргументе format переда- ется строка формата, которая содержит спецификаторы для любых допол- нительных аргументов. В начало каждого сообщения вставляются адрес клиента и текущее время.
    Ниже приводится пример сервера HTTP, который выполняется в отдель-
    HTTP, который выполняется в отдель-
    , который выполняется в отдель- ном потоке управления и может контролироваться с помощью словаря, ключи в котором интерпретируются как пути к документам.
    try:
    from http.server import BaseHTTPRequestHandler, HTTPServer # Py 3
    except ImportError:
    from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer # Py 2
    ёёё
    class DictRequestHandler(BaseHTTPRequestHandler):
    def __init__(self,thedict,*args,**kwargs):
    self.thedict = thedict
    BaseHTTPRequestHandler.__init__(self,*args,**kwargs)
    ёёё
    def do_GET(self):
    key = self.path[1:] # Отбросить ведущий символ ‘/’

    Пакет http
    635
    if not key in self.thedict:
    self.send_error(404, “No such key”)
    else:
    self.send_response(200)
    self.send_header(‘content-type’,’text/plain’)
    self.end_headers()
    resp = “Key : %s\n” % key resp += “Value: %s\n” % self.thedict[key]
    self.wfile.write(resp.encode(‘latin-1’))
    ёёё
    # Пример использования d = {
    ‘name’ : ‘Dave’,
    ‘values’ : [1,2,3,4,5],
    ‘email’ : ‘dave@dabeaz.com’
    }
    from functools import partial serv = HTTPServer((“”,9000), partial(DictRequestHandler,d))
    ёёё
    import threading d_mon = threading.Thread(target=serv.serve_forever)
    d_mon.start()
    Чтобы опробовать этот пример, запустите сервер и введите в броузере адрес
    URL, такой как http://localhost:9000/name или http://localhost:9000/values.
    Если все действует как надо, вы увидите в окне броузера содержимое словаря.
    Кроме всего прочего, этот пример иллюстрирует способ передачи класса обработчика с дополнительными параметрами, которые должны исполь- зоваться при создании экземпляра обработчика. Обычно серверы создают обработчики, используя предопределенный набор аргументов, которые передаются методу __init__(). Передать дополнительные аргументы можно с помощью функции functools.partial(), как показано в этом примере. Эта функция возвращает вызываемый объект, включающий дополнительный параметр, но сохраняет сигнатуру вызова, ожидаемую сервером.
    Модуль http.cookies (Cookie)
    Модуль http.cookies обеспечивает возможность работы с блоками данных cookie на стороне сервера. В Python 2 этот модуль называется Cookie.
    Блоки данных cookie позволяют управлять состоянием веб-приложений, реализующих поддержку сеансов, аутентификации пользователей и обе- спечивающих прочие похожие возможности. Чтобы отправить блок дан- ных cookie броузеру пользователя, сервер HTTP обычно добавляет в ответ заголовок HTTP, как показано ниже:
    Set-Cookie: session=8273612; expires=Sun, 18-Feb-2001 15:00:00 GMT; \
    path=/; domain=foo.bar.com
    Альтернативный вариант передачи cookie заключается в том, чтобы вне- cookie заключается в том, чтобы вне- заключается в том, чтобы вне- дрить код JavaScript в раздел

    style=”visibility:hidden; position:absolute; background-color:#ffffff;”>



    ACME Officials Quiet After Corruption Probe


    Today, shares of ACME corporation
    (

    662
    Глава 23. Веб-программирование onMouseOut=”HidePopup();”>ACME)
    plummetted by more than 75% after federal investigators revealed that the board of directors is the target of a corruption probe involving the Governor, state lottery officials, and the archbishop.

    Модуль cgi
    663
    Когда отправляется запрос к соответствующему сценарию CGI, веб-сервер запускает CGI-программу в отдельном дочернем процессе. Программы CGI получают входные данные из двух источников: из потока sys.stdin и из переменных окружения, устанавливаемых сервером. Ниже перечислены наиболее типичные переменные окружения, которые устанавливаются веб-сервером:
    Переменная
    Описание
    AUTH_TYPE
    Метод аутентификации
    CONTENT_LENGTH
    Длина переданных данных в sys.stdin
    CONTENT_TYPE
    Тип данных запроса
    DOCUMENT_ROOT
    Корневой каталог с документами
    GATEWAY_INTERFACE
    Строка с номером версии CGI
    HTTP_ACCEPT
    Типы MIME, принимаемые клиентом
    HTTP_COOKIE
    Хранилище значения cookie
    HTTP_FROM
    Адрес электронной почты клиента (часто отправка этой информации бывает запрещена)
    HTTP_REFERER
    Ссылающийся адрес URL
    HTTP_USER_AGENT
    Информация о броузере клиента
    PATH_INFO
    Дополнительная информация о пути
    PATH_TRANSLATED
    Преобразованная версия переменной PATH_INFO
    QUERY_STRING
    Строка запроса
    REMOTE_ADDR
    IP-адрес клиента
    REMOTE_HOST
    Имя хоста клиента
    REMOTE_IDENT
    Пользователь, выполнивший запрос
    REMOTE_USER
    Имя аутентифицированного пользователя
    REQUEST_METHOD
    Метод (‘GET’ или ‘POST’)
    SCRIPT_NAME
    Имя программы
    SERVER_NAME
    Имя хоста сервера
    SERVER_PORT
    Номер порта сервера
    SERVER_PROTOCOL
    Протокол сервера
    SERVER_SOFTWARE
    Название и версия серверного программного обеспечения
    Вывод программы CGI записывается в поток стандартного вывода sys.std- out
    . Технические подробности, касающиеся разработки CGI-сценариев, можно найти, например, в книге «CGI Programming with Perl, 2nd Edition»,
    1 1
    Гундаварам Ш. «CGI-программирование на Perl, 2-е издание». – Пер с англ. –
    СПб.: Символ-Плюс, 2001.

    664
    Глава 23. Веб-программирование
    Шишира Гундаварама (Shishir Gundavaram) (O’Reilly, 2000). Нам же до- статочно знать два основных аспекта. Во-первых, содержимое формы HTML передается CGI-программе в виде текстовой последовательности, которая называется строкой запроса. В языке Python доступ к содержимому строки запроса осуществляется с помощью класса FieldStorage. Например:
    import cgi form = cgi.FieldStorage()
    name = form.getvalue(‘name’) # Получить содержимое поля ‘name’ формы email = form.getvalue(‘email’) # Получить содержимое поля ‘email’ формы
    Во-вторых, вывод CGI-программы делится на две части: заголовок HTTP и собственно данные (обычно в формате HTML). Эти две части всегда от-
    HTML). Эти две части всегда от-
    ). Эти две части всегда от- деляются друг от друга пустой строкой. Ниже показано, как производится вывод простого заголовка HTTP:
    print ‘Content-type: text/html\r’ # Данные будут выводиться в формате HTML
    print ‘\r’ # Пустая строка (обязательно!)
    Остальная часть вывода – это собственно данные. Например:
    print ‘’
    print ‘
    1   ...   52   53   54   55   56   57   58   59   ...   82


    написать администратору сайта