Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
lt;Directory "/var/www/html/mywebdir> AddHandler python-program .py PythonHandler mprocess
Содержание книги
- quot;""Отладка рег. выражения. Перед отладкой лучше убрать лишние скобки """
- decoder = re.compile(r'^([-+]?)0*(\d*)((?:\.\d*)?)((?:[eE][-+]?\d+)?)$')
- Для исключения неоднозначности документ вUnicodeможет быть в самом начале снабжен
- name,number,text a,1,something here b,2,"one, two, three" c,3,"no commas here"
- input_file.close() output_file.close()
- fieldnames=['name', 'number', 'text']) output_file = open("pr1.csv", "wb")
- Разбор сообщения. Класс Message
- quot;felton olive" <zinakinch@thecanadianteacher.com>
- parts.append(submsg.get_content_type()) ct_fields.append(submsg.get('Content-Type', '')) filenames.append(submsg.get_filename())
- from email.MIMEMultipart import MIMEMultipart from email.MIMEText import MIMEText
- class MIMEBase(_maintype, _subtype, **_params)
- for text, enc in email.Header.decode_header(subj): print enc, text
- lt;?xml version="1.0" encoding="iso-8859-1"?> <expression>
- lt;operation type="+"> <operand>2</operand> <operand>
- from xml.dom import minidom dom = minidom.Document()
- разработчики стараются придерживаться единогоAPI,который продиктован стандартом
- previousSibling(предыдущий брат).parentNode
- getAttribute(attname). getAttributeNode(attrname). removeAttribute(attname). removeAttributeNode(oldAttr). setAttribute(attname, value). setAttributeNode(newAttr). Пространства имен. lt;?xml version="1.0" encoding="UTF-8"?> <rdf:
- dom = xml.dom.minidom.parse("ex.xml")
- if node.nodeType == node.ELEMENT_NODE: print node.nodeName, node.namespaceURI
- Для корректной работы сценарии помещаются в предназначенный для этого каталог наweb-сервере (обычно он называется cgi-bin) или, если это разрешено конфигурацией
- print """Content-Type: text/plain
- print """Content-Type: image/jpeg
- В приведенных примерах имена появлялись в строке запроса только один раз. Некоторые формы порождают несколько значений для одного имени. Получить все значения можно с
- В начале отлаживаемого сценария нужно поставить
- lt;Directory "/var/www/html/mywebdir> AddHandler python-program .py PythonHandler mprocess
- password = req.get_basic_auth_pw() user = req.connection.user
- Документыzopeможно писать на языкеdtml -дополненииhtmlс синтаксисом для включения значений подобноssi (server-side include). Например,для вставки переменной
- С названием документа можно использовать
- lt;li tal:define="s modules/string" tal:repeat="el python:s.digits">
- Каждый сокет относится к одному из коммуникационных доменов. Модуль socket
- def do_something(x): lst = map(None, x); lst.reverse();
- print socket.getservbyname(srv, 'tcp'), srv
- Здравствуйте. Я изучаю курс по языку Python и отправляю письмо его автору.
- From smtplib import SMTP connect = smtp('mx. Abcde. Ru') connect. Set_debuglevel(1)
- Учетные данные пользователя: Server = "pop. Server. Com" username = "user" userpassword = "secretword"
- Получает строку s с приветствиемPOP3-сервера
- Команда аналогичнаretr,но Загружает только заголовок и
- Функции для загрузки сетевых объектов
- n=1&n=3&n=4&button=%F0%D2%C9%D7%C5%D4
- def download(url, file): import urllib, time start_t = time.time()
- urlparse(url, scheme='', allow_fragments=1)
- authinfo.add_password('My page', 'localhost', 'user1', 'secret')
- Вызвать удаленную функцию print req.add(1, 3)
- from SimpleXMLRPCServer import SimpleXMLRPCServer
- Лекция#10:Работа с базой данных
- Работа с базой данных из python-приложения
- Поддерживаетdb-api 2. 0,а значит,переход на любую другую субд потребует минимальных изменений в вызове функции connect() и,возможно,использования более
- Следующий сценарий создаст таблицу в базе данных(в случае сsqliteзаботиться о создании базы данных не нужно:файл создастся автоматически. Для других баз данных
- c = db.connect(database="tvprogram") cu = c.cursor()
<Directory "/var/www/html/mywebdir> AddHandler python-program .py PythonHandler mprocess
</Directory>
После этого необходимо перезапуститьweb-сервер и,если все прошло без ошибок,можно приступать к написанию обработчика mprocess.py.Этот сценарий будет реагировать на любой запрос видаhttp://localhost/*.py.
Следующий сценарий mprocess.py выведет в браузере страницу со словами Hello, world!:
from mod_python import apache
def handler(req): req.content_type = "text/html" req.send_http_header()
req.write("""<HTML><HEAD><TITLE>Hello, world!</TITLE></HEAD> <BODY>Hello, world!</BODY></HTML>""")
return apache.OK
Отличия сценария-обработчика отCGI-сценария:
1. Сценарий-обработчик не запускается при каждомHTTP-запросе:он уже находится в памяти,и из него вызываются необходимые функции-обработчики(в приведенном примере такая функция всего одна-handler()).Каждый процесс-потомокweb-сервера может иметь свою копию сценария и интерпретатораPython.
2. Как следствие п.1различныеHTTP-запросы делят одни и те же глобальные переменные.Например,таким образом можно инициализировать соединение с базой данных и применять его во всех запросах(хотя в некоторых случаях потребуются блокировки,исключающие одновременное использование соединения разными потоками(нитями)управления).
3. Обработчик задействуется при обращении к любому"файлу"с расширением py,тогда какCGI-сценарий обычно запускается при обращении по конкретному имени.
4. В сценарии-обработчике нельзя рассчитывать на то,что он увидит модули,расположенные в том же каталоге.Возможно,придется добавить некоторые каталоги в sys.path.
5. Текущий рабочий каталог(его можно узнать с помощью функции os.getcwd())также не находится в одном каталоге с обработчиком.
6. #!-строка в первой строке сценария не определяет версию интерпретатора Python. Работает версия,для которой был скомпилирован mod_python.
7. Все необходимые параметры передаются в обработчик в видеRequest-объекта.Возвращаемые значения также передаются через этот объект.
8. Web-сервер замечает, что сценарий-обработчик изменился, но не заметит изменений в импортируемых в него модулях.Команда touch mprocess.py обновит дату изменения файла сценария.
9. Отображение os.environ в обработчике может быть обрезанным.Кроме того,вызываемые из сценария-обработчика другие программы его не наследуют,как это происходит при работе сCGI-сценариями.Переменные можно получить другим путем:req.add_common_vars(); params = req.subprocess_env.
10. Так как сценарий-обработчик не является"одноразовым",какCGI-сценарий,из-за ошибок программирования(как самого сценария,так и других компонентов)могут возникать утечки памяти(программа не освобождает ставшую ненужной память).
Следует установить значение параметра MaxRequestsPerChild(максимальное число запросов,обрабатываемое одним процессом-потомком)больше нуля.
Другой возможный обработчик-сценарий идентификации:
def authenhandler(req):
|