Мы поможем в написании ваших работ!
ЗНАЕТЕ ЛИ ВЫ?
|
print """Content-Type: image/jpeg
Содержание книги
- Наоборот,не соответствует промежутку между символами на
- r"aa|bb|cc|AA|BB|CC"
- Строка из двух одинаковых букв,но шаблон задан с использованием групп
- 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-приложения
#!/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
<table width="80%%"><tr><td>
<form action="me.cgi" method="GET">
<input type="text" name="a" value="0" size="6"> <input type="submit" name="b" value="Обработать"> </form></td></tr></table>
<pre> %(mytext_html)s </pre>
</body></html>""" % vars()
В этом примере к заданному в форме числу прибавляется1.Кроме того,выводится исходный код самого сценария.Следует заметить,что для экранирования символов >, <, & использована функция cgi.escape().Для формированияWeb-страницы применена
операция форматирования.В качестве словаря для выполнения подстановок использован словарь vars() со всеми локальными переменными.Знаки процента пришлось удвоить,
чтобы они не интерпретировались командой форматирования.Стоит обратить внимание на то,как получено значение от пользователя.Объект FieldStorage"почти"словарь,с тем исключением,что для получения обычного значения нужно дополнительно посмотреть атрибут value.Дело в том,что в сценарий могут передаваться не только текстовые значения,но и файлы,а также множественные значения с одним и тем же именем.

Осторожно!
При обработке входных значенийCGI-сценариев нужно внимательно и скрупулезно проверять допустимые значения.Лучше считать,что клиент может передать на вход все,что угодно.Из этого всего необходимо выбрать и проверить только то,что ожидает сценарий.
Например,не следует подставлять полученные от пользователя данные в путь к файлу,в качестве аргументов к функции eval() и ей подобных;параметров командной строки;
частей вSQL-запросах к базе данных.Также не стоит вставлять полученные данные напрямую в формируемые страницы,если эти страницы будет видеть не только клиент,заказавшийURL (например,такая ситуация обычна вweb-чатах,форумах,гостевых книгах),и даже в том случае,если единственный читатель этой информации-администратор сайта.Тот,кто смотрит страницы с непровереннымHTML-кодом,поступившим напрямую от пользователя,рискуют обработать в своем браузере зловредный код,использующий брешь в его защите.
Даже еслиCGI-сценарий используется исключительно другими сценариями через запрос наURL, нужно проверять входные значения столь же тщательно, как если бы данные вводил пользователь. (Так как недоброжелатель может подать наweb-сервер любые значения).
В примере выше проверка на допустимость произведена при вызове функции int(): если было бы задано нечисловое значение,сценарий аварийно завершился,а пользователь увидел Internal Server Error.
После анализа входных данных можно выделить фазу их обработки.В этой частиCGI-сценария вычисляются переменные для дальнейшего вывода.Здесь необходимо учитывать не только значения переданных переменных,но и факт их присутствия или отсутствия,так как это тоже может влиять на логику сценария.
И,наконец,фаза вывода готового объекта(текста, HTML-документа,изображения,мультимедиа-объекта и т.п.).Проще всего заранее подготовить шаблон страницы(или ее крупных частей),а потом просто заполнить содержимым из переменных.
|