| CARVIEW |
web.py wikihome of the web.py community tutorial2.ruУстановкаДля нормальной работы программ с web.py необходимы сам web.py, flup и библиотеки баз данных. Скачайте в один и тот же каталог следующие файлы:
после этого разожмите последний архив, скопируйте содержимое папки flup в каталог, где вы работаете, и удалите ненужный хлам. Например так:
Таким образом мы подготовили среду для разработки. Поддержка URLСамая важная часть любова файла это структура его URL. Эти адреса - не только буквы, которые ваши посетители видят и отправляют по почте друзьям, это ментальная модель работы вебсайта. На популярных сайтах, таких как del.icio.us, URL это вообще часть пользовательского интерфейса. web.py легко позволяет сделать клевые URLы. Откройте в текстовом редакторе новый файл, назвав его ну... скажем... poluekt.py. Шучу. Удобнее будет code.py. Впишите в него главную строку:
так импортируются функции фреймворка web.py.
Это ваш лист соответствия urlов и функций. Первая часть - регулярное выражение с помощью которого определяется путь. Например '/', или '/help/faq', или даже /item/(\d+). Строка d+ обозначает "некоторая ненулевая последовательность цифр", подробнее смотрите об этом в Python Regex HowTo или воспользуйтесь удобной генерилкой regex. Скобки вокруг \d+ нужны для того, чтобы удобно исользовать эти цифры в дальнейшем. Вторая часть - имя класса, которому будет передан запрос. Например, 'index', 'welcomes.hello' (то есть класс hello из модуля welcomes) или 'get_\1'. \1 заменяется на первое совпадание выделенного регулярного выражения. Все остальные элементы выделенного регулярного выражения (помните (\d+)? ) передаются в класс-обработчик. Собственно в нашем случае сказано что URL "/" (т.е. первая страница) будет обрабатываться классом 'index' Теперь нам надо написать сам класс. В то время как большая часть людей не обращая ни на что внимание бродит по сайтам, внутри веба используется архитектурный стиль, известный как REST. Детали не так уж и важны, но основная идея в том, что посетители сайтов просят сервер применить определенные действия (например "GET" и "POST") на ссылки (такие как "/" или "/wtf?f=1"). "GET" это то, к чему мы все привыкли, он используется чтобы получить содержимое страницы. Когда вы открываете сайт "yandex.ru" в своем браузере, на самом деле вы как бы просите Яндекс взять ("GET" от английского "to get" - брать) страницу '/', командой "GET /". "POST", вторая популярная функция, от английского to post - записать, внести в списки. Логично предположить что с помощью этой команды вы просите что-либосделать_, например зачарджить кредитную карту и подтвердить заказ. В этом и есть фича, потому что "GET" может свободно использоваться везде, например индексироваться яндексом, что не слишком хорошо для страниц с заказами. Представьте себе что робот яндекса пришел на ваш сайт и заказал все товары! РазработкаВ нашем коде для web.py мы сделаем так:
Этот страшный набор букв говорит, что нужно запустить наше веб-приложение при исполнении файла. Первый аргумент вызова web.run, urls, это тот самый список-соответствие url'ов и функций, описаный выше. У web.py также есть средства для отладки, например добавьте перед последней строкой: web.webapi.internalerror = web.debugerror Теперь при ошибке вы будете читать нормальный, человеко-читаемый бэктрейс. Если в последней строке вписать последним аргументом web.reloader будет еще лучше. Это очень удобная опция, заставляющая web.py перезагружать исполняемый файл каждый раз, когда в нем что-то изменено. Постарайтесь не забыть убрать и этот параметр перед публичным запуском вашей страницы. Кстати, если вместо web.reloader вписать web.profiler можно будет узнавать сколько времени занимает та или иная функция при выдаче страницы. Говоря человеческим языком, это профайлер, то есть средство, помогающее оптимизировать скорость работы скрипта. Настало время запускать наше приложение. Просто выполните команду
и приложение запустит маленький веб-сервер, который будет отвечать на адрес https://localhost:8080/. Вы можете изменить порт по умолчанию на другой, указав номер порта в качестве параметра, например так:
Вы также можете запускать этот скрипт как CGI или FastCGI скрипт -- он автоматически распознает подобные вещи. На самом деле web.py использует WSGI, так что ваше приложение может работать с любым интерфейсом к web для python, в том числе scgi и mod_python. Теперь, если вы откроете свой браузер на ссылке https://localhost:8080/, ваше приложение поздаровается с вами. ШаблоныНаписание HTML внутри кода на Python это отвратительно. Куда веселее писать на Python внутри HTML. К счастью web.py позволяет нам это дедать, с легкостью. Cоздадим каталог для наших темплейтов (назовем его... ммм.... "templates"). Внутри этого каталога создадим файлик с расширением .html (скажем index.html). Теперь внутри это файла напиешем нормальный HTML:
Или используем специальный синтаксис темплейтов web.py, например так:
Как видите теплейты очень похожи на обычный python за исключением оператора Вернемся к коду. Под первой строкой, сразу после импортов впишите:
Это обьяснит библиотеке, где же именно искать темплейты. Теперь поменяйте
Зайдите на ваш сайт и присмотритесь к надписи Превед тебе, дорогой balbes. (Заметка для девелоперов: добавьте Забавные URLыТеперь измените ваш список URLов на такой:
и поправьте определение
Удалите строку, устанавливающую name. Теперь если зайти просто на Базы ДанныхНиже строки с web.run впишите:
конечно же вам нужно изменить эти параметры, чтобы иметь доступ к базе данных. Создайте простую табличку, например такую:
и вставьте в нее строчку с примером:
В index.py давайте опять переделаем
И снова вернем список листов, так чтобы 'GET /' обращался на index. Черт, теперь выкиньте все из index.html и пишите сначала: $def with (todos)
Посетив вашу уже немаленькую веб-страничку, вы увидите один элемент: 'Заучить web.py'. Допишите в конец этого же файла:
Измените ваш список ссылок urls вот так:
Обратите внимание на запятые. Помните, что в Python две строки написанные без запятых просто обьединяются. Добавим еще один класс - add:
web.insert возвращает идентификатор свежевставленного элемента, а команда web.seeother пересылает пользователя на этот новый элемент. Еще одна штука - вот в строчке i = web.input мы получили в переменной i все параметры, переданные из формы пользователем. Красиво и просто, правда? В темпе вальса: web.transact() начинает транзакцию, web.commit() коммитит её, web.rollback(), что логично, откатывает её. web.update работает точно также как web.insert за исключением того, что вместо возврата нового элемента она обновляет уже сохраненный элемент по его id (или по строке, которая подставляется в WHERE запроса) В общем это всё к чему - теперь вы можете добавлять новые элементы в список. Объект-хранилищеИ web.input, и web.query, а также большинство других функций web.py возвращают в качестве результата объект-хранилище. Этот объект похож на стандартный dictionary языка python, однако позволяет обращаться к элементам не только через d['figna'], но и d.figna, что на 3 символа короче :) КукиА также спамы и трояны... Куки работают также, как и web.input. web.cookies() возвращает объект-хранилище с набором кук, пришедших от браузера. Вы можете изменять их функцией web.setcookie(name, value, expires=""), где name - имя куки, value - значение, а expires, соответственно, срок истечения действия куки. И web.input, и web.cookies в качестве параметра принимают названия и пары ключ-значение. Например, вызвав web.input('color', times=1) вы поймаете ошибку, если в форме не окажется элемента color, или если в элементе times не будет единица. Типовой паттерн использования:
Пока всё, ребята. В следующий раз я раскажу вам про модуль forms. Комментарии? Вопросы? Мнения? Предложения? мой адрес - bobuk@justos.org wedding gown dress discount wedding gown wedding gown prom gown dress wedding dress,bridesmaid dress,prom dress bridesmaid dress cheap prom dress wedding gown dress western wedding dress prom dress quinceanera dress quinceanera gown quinceanera dresses oil paintings oil painting reproductions art reproductions oil paintings oil paintings |
Powered by infogami, which uses web.py. |
