Сценарий генератора страниц

scenarij generatora stranic Законченные системные программы

Теперь, имея файл шаблона страницы, сценарий Python из примера 6.8 автоматически сгенерирует все необходимые файлы со ссылками переадресации.

Пример 6.8. PP4E\System\Filetools\site-forward.py

############################################################################## Создает страницы со ссылками переадресации на перемещенный веб-сайт.

Генерирует по одной странице для каждого существующего на сайте файла html; сгенерированные файлы нужно выгрузить на ваш старый веб-сайт. Смотрите описание ftplib далее в книге, где представлены приемы реализации выгрузки файлов в сценариях после или в процессе создания файлов страниц.

##############################################################################

import os

servername = ‘learning-python.com’ # новый адрес сайта

homedir = ‘books’ # корневой каталог сайта

sitefilesdir = r’C:\temp\public_html’ # локальный каталог с файлами сайта uploaddir = r’C:\temp\isp-forward’ # где сохранять сгенерированные файлы templatename = ‘template.html’ # шаблон для генерируемых страниц

try:

os.mkdir(uploaddir) # при необходимости создать каталог для

except OSError: pass # выгружаемых страниц

template = open(templatename).read() # загрузить или импортировать шаблон sitefiles = os.listdir(sitefilesdir) # имена файлов без пути к ним

count = 0

for filename in sitefiles:

if filename.endswith(‘.html’) or filename.endswith(‘.htm’):

fwdname = os.path.join(uploaddir, filename) print(‘creating’, filename, ‘as’, fwdname) filetext = template.replace(‘$server$’, servername) # вставить текст filetext = filetext.replace(‘$home$’, homedir) # и записать

filetext = filetext.replace(‘$file$’, filename) # измененный файл

open(fwdname, ‘w’).write(filetext) count += 1

print(‘Last file =>\n’, filetext, sep=’’)

print(‘Done:’, count, ‘forward files created.’)

Обратите внимание, что текст шаблона загружается путем чтения файла, — шаблон можно было бы реализовать в виде импортируемой строковой переменной Python (например, в виде строки в тройных кавычках в файле модуля). Заметьте также, что все параметры конфигурации задаются инструкциями присваивания в начале сценария, а не аргументами командной строки, — поскольку они меняются очень редко, удобнее просто один раз напечатать их в самом сценарии.

Но главное, что нужно отметить, — этому сценарию совершенно безразлично, как выглядит файл шаблона. Он просто слепо выполняет глобальную подстановку с различными именами файлов для каждого генерируемого файла. Фактически файл шаблона можно изменить как угодно, и это никак не отразится на сценарии. Такое разделение труда может быть использовано в самых разных ситуациях — при создании «make-файлов», бланков писем, ответов CGI-сценариев на веб-сервере и так далее. Что касается библиотечных инструментов, сценарий генератора:

     Использует функцию os.listdir для обхода всех имен файлов в каталоге сайта (точно так же можно было бы использовать функцию glob.glob, но при этом потребовалось бы удалять пути к файлам из их имен)

     Использует строковый метод replace для поиска и замены элементов в тексте файла шаблона, ограниченных символами $, и метод endswith, чтобы пропустить файлы, не являющиеся страницами HTML (например, изображения — большинство броузеров не знают, что делать с разметкой HTML в файлах «.jpg»)

     Использует функцию os.path.join и встроенные объекты файлов для записи полученного текста в файл со ссылками переадресации с тем же именем в выходном каталоге

Окончательным результатом является зеркальное отражение первоначального каталога веб-сайта, содержащее только файлы со ссылками переадресации, созданные по шаблону страницы. Дополнительным преимуществом сценария генератора является возможность его выполнения практически на любой платформе Python. Я запускал его на ноутбуке, работающем под управлением Windows (на котором я пишу эту книгу), а также на Linux-сервере (где находится мой сайт http:// learningpython.com). Ниже показан пример запуска этого сценария в Windows:

C:\…\PP4E\System\Filetools> python siteforward.py

creating about-lp.html as C:\temp\isp-forward\about-lp.html

creating about-lp1e.html as C:\temp\isp-forward\about-lp1e.html

creating about-lp2e.html as C:\temp\isp-forward\about-lp2e.html

creating about-lp3e.html as C:\temp\isp-forward\about-lp3e.html

creating about-lp4e.html as C:\temp\isp-forward\about-lp4e.html

множество строк удалено

creating training.html as C:\temp\isp-forward\training.html

creating whatsnew.html as C:\temp\isp-forward\whatsnew.html

creating whatsold.html as C:\temp\isp-forward\whatsold.html

creating xlate-lp.html as C:\temp\isp-forward\xlate-lp.html

creating zopeoutline.htm as C:\temp\isp-forward\zopeoutline.htm Last file =>

<HTML>

<head>

<META HTTP-EQUIV=”Refresh” CONTENT=”10; URL=http://learning-python.com/books/zop eoutline.htm”>

<title>Site Redirection Page: zopeoutline.htm</title>

</head>

<BODY>

<H1>This page has moved</H1>

<P>This page now lives at this address:

<P><A HREF=”http://learning-python.com/books/zopeoutline.htm”>

http://learning-python.com/books/zopeoutline.htm</A>

<P>Please click on the new address to jump to this page, and update any links accordingly. You will be redirectly shortly. </P> <HR>

</BODY></HTML>

Done: 124 forward files created

Чтобы проверить результаты работы сценария, щелкните дважды на любом сгенерированном файле и посмотрите, как он выглядит в вебброузере (или выполните команду start в окне консоли DOS, например start ispforward\aboutlp4e.html). На рис. 6.1 показано, как выглядит одна из сгенерированных страниц на моем компьютере.

Рис. 6.1. Сгенерированная страница переадресации сайта

 

Для завершения процесса еще необходимо установить ссылки переадресации: выгрузите все сгенерированные файлы из выходного каталога в веб-каталог вашего старого сайта. Если и это слишком большой объем для ручной работы, посмотрите, как это можно сделать автоматически с помощью Python посредством сценария загрузки на сервер по FTP в главе 13 (эту работу выполняет сценарий PP4E\Internet\Ftp\ uploadflat.py). Всерьез занявшись написанием сценариев, вы поразитесь тому, какой объем ручного труда можно автоматизировать с помощью Python. В следующем разделе представлен еще один большой пример.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий