- •Email пакеті
- •Хабарларды талдау. Message классы
- •Хабарлама қалыптастыру
- •Тақырыпша өрісін талдау
- •Атаулар кеңістігі
- •Cgi модулі
- •Өндіруші ортасы
- •Zope және оның обьектілі моделі
- •Smtplib модулі
- •Poplib модулі
- •Url талдау үшін функия
- •Urllib2 мүмкіндіктері
- •Қорытынды
- •Обьект – байланыс
- •Объект-курсор
- •Обьектер-түрлері
- •Python – қосымшаларындағы деректер қоырмен жұмыс істеу
- •Деректер қорын толтыру
- •Деректер қорынан таңдау
- •Ескерту:
- •Қорытынды
- •11 Дәріс: Көп ағынды есептеулер
- •Көп ағынды бағдарлама мысалы
- •Threading модулінің функциясы
- •Thread классы
- •Қай кезде құлыпталу қажет?
Атаулар кеңістігі
XML-дің тағы да бір ерекшелігі – атаулар кеңістігі болып табылады. Олар әртүрлі схемалардың кесектерінен XML-құжаттарын құрауға мүмкіндік береді. Мысалы, осылайша, барлық HTML элементтерінің ерекше кеңістік аттарына тиесілігін көрсетіп, XML-құжатна HTML кесегін қосуға болады.
XML-кодының келесі мысалы кеңістік атауының синтаксисін көрсетеді (foaf.rdf файлы):
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:dc="http://http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<rdf:Description rdf:nodeID="_:jCBxPziO1">
<foaf:nick>donna</foaf:nick>
<foaf:name>Donna Fales</foaf:name>
<rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
</rdf:Description>
</rdf:RDF>
Ескерту:
Мысал WWW технолгогиясын жасаушыларымен, Тимом Бернерс-Ли бастауындағы құрастырушылар командасымен құрылған cwm пакетінен алынған. Айтпақшы, cwm-де Python тілімен жазылған. cwm пакеті, Тимом Бернерс-Ли-дің ықпалындағы, семантикалық желідегі-жаңа идеялар үшін жалпы мақсаттағы деректерді өңдеуге қызмет етеді.
Кеңістік аттарының атауы префикстердің элементтердің атауы түрінде жүреді. Бұл атаулар жай ғана ат емес. Олар URI (Universal Resource Locator, әмбебап ресурстарын көрсетуші) түрінде берілуі керек идентификаторымен сәйкес. Жоғарыда келтірілген мысалда бес кеңістік атауы аталған (xmlns, dc, rdfs, foaf и rdf), оның ішінде тек біріншісі жарнамалау қажет етпейді, өйткені қондырылған болып табылады. Және нақты түрде үшеуі ғана қолданылған: (xmlns, foaf және rdf).
Кеңістік аты XML-құжатынан түрлі схемаларға жататын бөліктерін бөлуге мүмкіндік береді.
Xml пакетінде кеңістік аттарының механизімін түсінетін әдістер бар. Әдетте бұндай әдістер және атрибуттар өздерінің аттарында NS әріптері болады.
Осы элементтің кеңістік атымен сәйкес келетін URI-ді namespaceURI атрибутының көмегімен алуға болады.
Келесі мысалда URI элементтері жазылуда:
import xml.dom.minidom
dom = xml.dom.minidom.parse("ex.xml")
def output_ns(node):
if node.nodeType == node.ELEMENT_NODE:
print node.nodeName, node.namespaceURI
for child in node.childNodes:
output_ns(child)
output_ns(dom)
Нәтижесінде:
rdf:RDF http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdf:Description http://www.w3.org/1999/02/22-rdf-syntax-ns#
foaf:nick http://xmlns.com/foaf/0.1/
foaf:name http://xmlns.com/foaf/0.1/
rdf:type http://www.w3.org/1999/02/22-rdf-syntax-ns#
Ескеретіні, кеңістік атауынның нұсқауы тек элементтер атауы үшін ғана емес, сонымен қатар атрибуттарғада жасалуы мүмкін.
Қорытынды
Бұл дәрісте үш жеткілікті таратылған мәтіндік ақпараттарды өңдеудің нұсқалары қарастырылды: CSV, Unix mailbox және XML. Әрине деректер форматы, тіпті мәтінде негізделген ойдағыдан көп, алайда ұсынылған мәліметтер, форматты өңдеу үшін немесе басқалары түсінетіндей өз модулін құрастыруын кез келген модулмен тез ұғынуға көмектеседі.
#8-дәріс: Web-қосымшаларын әзірлеу
Web-қосымшалары арқылы HTML және XML құжаттарының басқаруындағы стандартты www-браузерімен жұмыс істейтін негізгі пайдаланушы интерфейсінің бағдарламасын түсінуге болады. Қолданушы интерфейсінің сапасын жақсарту үшін көбіне JavaScript қолданылады, алайда бұл интерфейс әмбебаптылығын бірнеше төмендетеді. Ескере кететіні интерфейсті java немесе Flash-апплеттерінде құруға болады, алайда бұндай қосымшаларды web-қосымшалары деп атау қиындық тудырады, өйткені, сервермен байланысу үшін java немесе Flash өздерінің хаттамаларын қолдана алады, яғни HTTP хаттамасы WWW үшін стандартты емес байланыс қолданылады.
Web-қосымшаларын құру кезінде Пішінін (сыртқы түрін,стилін), Мазмұнын және Деректерді өңдеу логикасын бөлуге тырысады. Web-сайттарды құрудың заманауи технологиялары бұл идеалға жеткілікті түрде жетуге мүмкіндік береді. Дегенмен, тіпті көп деңгейлі қосымшаларды қолданбай-ақ басқа екеуін тиіспейтін (немесе жуық тимей(не затрагивая)), бұлардың кез келген аспектін өзгертуге мүмкіндік беретін стилін ұстануға болады. Бұл тақырыптың жалғасын бағдарламалау ортасына арналған бөлімде танысуға болады.
CGI-сценарилер
WWW үшін қосымшаларды құрудың классикалық жолы – CGI-сценарилерін жазу болып табылады (кейде – скриптер деп те аталады). CGI (Common Gateway Interface, жалпы шлюзді интерфейс) – бұл сыртқы қосымшалармен сервердің өзара әрекеттесуін реттейтін стандарт. WWW жағдайда, веб-сервер нақты сценариге генерациялық бетті жасау үшін сұрау жіберуі мүмкін. Бұл сценарий веб-серверден мәліметтердің кірісін алып (ол өз кезегінде оны қолданушыдан алуы мүмкін), дайын обьектіні жинақтайды (сурет, аудио мәліметтер, стилдер кестелері және тағы басқа)
Сценарийді шақырған кезде веб-сервер стандартты енгізу арқылы оған ақпаратты тасымалдайды, айнымалылар ортасы және, ISINDEX үшін пәрмен жолы аргументтері арқылы (олар sys.argv арқылы қол жетімді.).
Толтырылған браузердегі веб-сервер формасының (және CGI-сценарий) екі негізгі мәліметтерді жіберудің әдістері – GET және POST. Әдіске байланысты мәліметтер әр түрлі жіберіледі. Бірінші жағдайда олар тікелей URL-ге кодталады және орналастырылады, мысалы http://host/cgibin/a.cgi?a=1&b=3. Сценарий оларды QUERY_STRING айнымалы ортасының атымен алады. POST әдісі жағдайында олар стандартты енгізуге жіберіледі.
Сценарийлер дұрыс жұмыс істеуі үшін осы каталог үшін арналған веб-серверде (әдетте ол cgi-bin деп аталады) немесе, егер бұл сервер конфигурациясымен рұқсат етілген болса, HTML құжатының кез келген жерінде орналасады. Сценарийдің орындалатын белгісі болуы тиіс. Unix жүйесінде оны chmod a+x командасы арқылы орнатуға болады.
Келесі қарапайым сценарий os.environ сөздігінен мәнін шығарады және оған не жіберілгенін көруге мүмкіндік береді.
#!/usr/bin/python
import os
print """Content-Type: text/plain
%s""" % os.environ
Оның көмегімен веб-сервермен орнатылған айнымалылар ортасын көруге болады. web-серверге CGI-сценарий берілген файл тақырыпша бөлімін қамтиды, мұнда мета-ақпаратпен берілген өріс көрсетілген (мазмұн түрі, құжаттың соңғы жаңартылған уақыты, кодтау және т.б.).
Негізгі айнымалылар ортасы сценарийлер жасау үшін жеткілікті:
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
Қажетті құжат тілі.
CGI-сценарийіндегі os.environ сөздігі қамтиды:
{
'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")
