|
Бесплатная раскрутка сайтов |
Все файлы на этом сайте
проверены антивирусом |
|
Переползаем на Питон Осенью прошлого года был запущен сайт http://www.iso.ru/, разработанный компанией ADT. "Движок" сайта, представляющий собой набор CGI скриптов, был написан на Perl. По прошествии полугода эксплуатации возникла необходимость расширить функциональность сайта. Поэтому встал вопрос о выборе языка для написания скриптов. Perl хорошо подходит для обработки текстов и широко используется для web-программирования, однако программы, написанные на Perl, трудночитаемы и неудобны для сопровождение из-за специфического синтаксиса Perl'a. Если стоит задача быстро написать небольшой скрипт усилиями одного человека и у вас специфический склад мышления, то, возможно, Perl - это то, что вам нужно. Если же требуется разработать достаточно сложную систему и затем организовать ее поддержку коллективом специалистов, то для этих целей, на мой взгляд, более подходит Python. Python сочетает в себе понятный синтаксис и мощь, имеет развитые средства обработки текста и создания web-приложений. Python доступен для различных операционных систем, таких как UNIX (Linux), MacOS, MS-Windows 3.1, Windows NT, OS/2 и даже MS-DOS. Скрипты, написаные на Python являются хорошо переносимыми между платформами. Если бы возникла задача перенести сайт http://www.iso.ru/ с платформы Linux на Windows NT, потребовались бы минимальные изменения кода (по существу, пришлось бы только исправить пути к файлам шаблонов). Впрочем, более подробно о достоинствах Python'а вы можете узнать из статьи "Знакомьтесь - Python" Якова Марковича, опубликованной в Журнале №1. Таким образом, решено было использовать Python для написания скриптов для сайта http://www.iso.ru/. "Движок" сайта состоял из следующих логических частей (скриптов):
В первую очередь было решено расширить функциональность журнала -добавить систему оценки статей и сервис выбора самой интересной в данном номере. Таким образом, в список потребовалось добавить еще один скрипт. Все остальные скрипты также нужно было в большей или меньшей степени усовершенствовать. Все скрипты написаны достаточно стандартным образом: создается экземпляр класса FieldStorage, который читает содержимое формы, затем, в зависимости от наличия и содержания определенных ключей организуется ветвление, обработка данных и вывод результата. В этой статье мне хотелось бы только поделиться опытом преодоления некоторых трудностей, возникших при разработке скриптов для http://www.iso.ru/. Формирование HTML из шаблонов Как известно, вывод любой CGI программы
состоит из двух частей: заголовка и
данных, которые разделяются пустой
строкой. Сначала программа должна
сообщить клиенту, какой тип данных он
будет получать. Это достигается печатью
набора HTTP заголовков в стандартный
вывод. Например, строка Затем, после разделительной строки,
идут произвольные данные (обычно, код HTML).
Конечно, можно просто вывести HTML текст
оператором Шаблон представляет собой текстовый
файл, содержащий HTML код с переменными,
которые впоследствии будут заменяться
необходимыми значениями. Имена
переменных желательно сделать такими,
чтобы исключить их случайное повторение
внутри HTML кода (например, не нужно
использовать переменную с именем Вот пример шаблона гостевой книги, хранящийся в файле guestbook.tmpl: <table width=100% align=center> Для удобства работы можно написать функцию, читающую шаблон и заменяющую все переменные в нем на нужные значения. Она получает в качестве аргументов имя шаблона и словарь, представляющий собой набор пар <имя переменной> : <значение>. Возвращает функция сконструированный текст. Функция может выгладеть примерно так: def replace_tmpl( tmpl, var_list ): А вот скрипт, выводящий запись в гостевой книге: print 'Content-Type: text/html\n\n' Все динамические странички на сайте http://www.iso.ru/ формируются таким способом. Работа с сервером баз данных MySQL Практически любой сайт, содержащий элементы взаимодействия с пользователем использует какие-либо базы данных. Сайт http://www.iso.ru/ не является исключением. В базе данных хранятся новости, события, статьи журнала, информация по зарегистрированным пользователям и многое другое. Мы используем сервер баз данных MySQL. На данный момент MySQL является наиболее популярной платформой для создания web-приложений, так как это простой и в тоже время довольно мощный и надежный SQL сервер. MySQL как и Python поддерживает широчайший спектр платформ, включая Linux и Windows NT. Для работы с MySQL в Python используется библиотека MySQLdb, существующая как для Linux, так и для Win32. Работа с базой данных проходит достаточно стандартно. Сначала создается объект, устанавливающий соединение с БД (Connection Object): mydb=MySQLdb.Connect(db='iso',host='localhost', Затем создается объект-курсор: cursor = mydb.cursor() После этого можно выполнять любые SQL запросы к базе данных: cursor.execute('SELECT * FROM guestbook ORDER by date DESC') Далее получаем результат запроса: resultset = cursor.fetchall() Метод print 'Content-Type: text/html\n\n' Отправка форм Часто возникает задача передачи данных от пользователя на сайт (пожелания по работе сайта, материалы, которые пользователю хотелось бы разместить на сайте и т.д). В простейшем случае - это текстовое сообщение, набираемое в форме и посылаемое затем на электронный адрес поддержки сайта. В этом случае форма может выглядеть следующим образом: <form action="/cgi-bin/forms.cgi" METHOD="GET"> Для отправки сообщений по протоколу SMTP
нужно использовать библиотеку import smtplib mail=smtplib.SMTP("smtpserver.ru") Формируем тело сообщения из полученных данных в соответствии с RFC822: form = cgi.FieldStorage() Затем вызываем метод sendmail для отсылки сообщения: mail.sendmail( 'admin@iso.ru', 'market@iso.ru', msg ) Здесь admin@iso.ru - адрес отправителя, market@iso.ru - адрес получателя. Можно реализовать и более сложную функциональность с пересылкой вложенных файлов. Для начала в форму нужно добавить поле ввода file: <input name="attach" type="file" size="12"> Для создания почтового сообщения с
вложениями удобно пользоваться классом Функция представляет файл в кодировке
base64 и конструирует многокомпонентный
документ MIME, который отправляет по
адресу А вот пример использования этой функции: send_attach(msg, form['attach'].value, form['attach'].filename.split('')[-1],
'Attachment', 'market@iso.ru') Проверка корректности форм Большинство CGI-скриптов работают с данными, полученными из форм. Для успешного использования этих данных необходимо проверить их корректность. В простейшем случае, это - просто проверка существования заполненного поля: form = cgi.FieldStorage() В более сложных случаях, таких как
проверка корректности введенного e-mail
адреса требуется использование модуля re
для сопоставления полученных данных с
регулярными выражениями. Например,
регулярное выражение Административный интерфейс Для облегчения сопровождения сайта был разработан административный интерфейс - набор скриптов для контроля за контентом. Он состоит из следующих частей:
Все скрипты достаточно жестко привязаны к структуре сайта, поэтому нет смысла подробно разбирать их. Хочу затронуть только один момент: удобно сделать отдельную таблицу для размещения информации о полях таблиц, используемых скриптами сайта. Это позволит писать универсальные функции администрирования для разных таблиц. Например, функция, реализующая вывод списка записей на нашем сайте построена следующим образом: на входе она получает имя таблицы, по нему читается информация о таблице из служебной таблицы (названия полей, выводить ли поле в списке и т.д.) и на основании полученной информации выводится список записей. Так как список, состоящий из всех полей, очень громоздкий (статья в журнале может занимать несколько страниц), в списке выводятся только те поля, для которых в служебной таблице стоит флаг вывода в списке. Благодаря этому добавление новых таблиц в базу требует лишь записи информации о них в служебную таблицу. |
|
Комментарии: Пишите мне | Copyright © |