{{ attachment:webpy.gif }} ''Вольный перевод'' http://webpy.org/docs/0.3/tutorial <> = Введение = Итак, Вы знаете [[Python]] и хотите создать сайт. При помощи web.py, Вы сможете легко это сделать! Если вы хотите пройти данный учебник полностью, то вам необходимо установить Python, web.py, flup, psycopg2, и Postgres (или любую другую базу и python адаптер к ней). = Обработка URL = Наиболее важная часть любого вебсайта - это структура его URL. Эти адреса - это не только то, что видят посетители вашего сайта и отправляют по почте друзьям, они также определяют ментальную модель вашего сайта. На популярных сайтах, наподобие del.icio.us, URL'ы являются частью пользовательского интерфейса. web.py позволяет легко работать со сложными URL'ми. Чтобы начать работу с web.py приложением, создайте текстовый файл (назовём его `code.py`) и введите: {{{ import web }}} Так мы импортируем web.py модуль. Теперь мы должны указать web.py нашу структуру URL'ов. Давайте начнём с чего-то простого: {{{#!highlight python urls = ( '/', 'index' ) }}} Первая часть - это регулярное выражение, которое соответствует такими адресами, как `/`, `/help/faq`, `/item/(\d+)`, и др. (`\d+` будет соответствовать последовательности цифр). Скобки вокруг `\d+` необходимы для удобного дальнейшего использования этих цифр. Вторая часть - это имя класса, который будет обрабатывать запрос. Например, `index`, `welcomes.hello` (то есть класс hello из модуля welcomes) или 'get_\1'. \1 заменяется на первое совпадание выделенного регулярного выражения. Все остальные элементы выделенного регулярного выражения передаются в класс-обработчик. То есть, код выше обозначает, что мы хотим обрабатывать адрес `/` (главная страница) классом с именем `index`. Теперь нам надо создать приложение с указанием `urls` адресов. {{{#!highlight python app = web.application(urls, globals()) }}} Этой строкой, мы создали приложение с адресами, перечисленными выше и использующее классы из глобального пространства имён данного файла. = Отличие GET и POST запросов = Теперь нам надо создать сам `index` класс. Большинство пользователей Интернета не замечают, что их браузер общается с WWW при помощи HTTP протокола. Детали не важны, но базовая идея состоит в том, что пользователи просят веб-сервер применить определённые действия (`GET`, `POST` и др.) по определённым адресам (например `/`, или `/foo?f=1`). `GET` запрос является самым популярным, он используется для получения содержания страниц. Когда мы вводим в браузере `python.su`, то браузер отправляет `GET /` на сервер. Вторым по популярности является `POST` запрос. Он наиболее часто используется при оправке данных, через веб-формы, например запрос на покупку чего-то. Это является ключевым отличием от `GET`. GET адреса могут быть проиндексированы поисковыми системами, что предпочтительно для большинства страниц, но мы определённо не хотим, чтоб так происходила обработка заказов (представьте, что Google попытался купить всё на вашем сайте! :) ) В `web.py` данные методы разделены явным образом: {{{#!highlight python class index: def GET(self): return "Hello, world!" }}} Теперь `GET` метод будет вызываться каждый раз, когда будет происходить запрос по адресу `/`. Хорошо, теперь закончим наше первое приложение строкой, которая запустит внутренний веб-сервер `web.py`: {{{#!highlight python if __name__ == "__main__": app.run() }}} Стоит отметить, что для написания минимального веб-приложения, нам понадобилось лишь 5 строк кода. = Запуск сервера = Если в вашей командной строке вы введёте: {{{ $ python code.py http://0.0.0.0:8080/ }}} Теперь у вас запущено веб-приложение со своим веб-сервером. Зайдите по адресу http://127.0.0.1:8080/ и вы увидите "Hello, world!". (Вы можете добавить IP адрес/порт после `code.py`, чтоб контролировать где запущено сервер. Также вы можете запустить fcgi или scgi сервер). {{{#!wiki note Вы можете задать определённый порт в строке запуска. `$ python code.py 1234` }}} = Шаблоны =