Особенности веб-приложения, генерирующего статичные страницы HTML
Любое работающее web-приложение использует ресурсы компьютера. На локальном сервере, когда только разработчик просматривает сайт, количество запросов к базе данных и эффективность выполнения программы не имеют большого значения. Однако на удаленном веб-сервере на ресурс могут заходить тысячи пользователей, и разработанная вами программа для каждого "собирает" запрошенную страницу. В этом случае появляются вопросы к выделяемым под сервер ресурсам.
Но если все посетители сайта на одни и те же запросы получают одни и те же HTML-страницы, зачем веб-приложению (в нашем случае на базе фреймворка Flask) для каждого из них заново генерировать страницу?
Другими словами, можно снизить нагрузку на сервер, имея кэш готовых страниц. И лишь когда одна из них меняется (добавляется, удаляется), использовать скрипт для изменения соответствующего файла в этом "кэше".
Одним из вариантов решения может быть генерация с помощью flask-приложения готовых файлов *.html. При этом на удаленном веб-сервере будет размещаться только статичный вариант сайта без его программной части (без базы данных и python-скриптов).
В этом случае отпадает необходимость в установке на веб-сервер дополнительного ПО и его более сложной настройке. Более того, сайт можно разместить на обычном виртуальном хостинге.
Однако реализация такого подхода вносит свои сложности в разработку. В первую очередь, надо изменить файловую структуры проекта. Например, в одном из каталогов у нас будет готовый статичный сайт. Тогда именно в нем придется разместить папки для изображений, стилей и скриптов. С другой стороны, HTML-шаблоны с jinja, python-скрипты, база данных будут находиться в других каталогах. В соответствии с этим потребуется изменить адресацию в коде.
Во-вторых, может быть удобнее свести два flask-приложения (пользовательское и администратора, которые были разработаны во второй части курса) в одно. В нем редактирование статьи будет выполняться на отдельной странице, тогда как по адресу страницы статья будет открываться в готовом виде (без формы). Реализация такой программы будет рассмотрена в следующем уроке, так как эту наработку можно использовать отдельно как будущую основу для многопользовательского сайта.
В третьих, в приложение понадобится добавить код, который при внесении изменений в базу данных будет создавать или перезаписывать html-файлы в каталоге нашего статичного сайта. Сама генерация таких файлов не так сложна как кажется. Также вызывается render_template()
, но вместо передачи результата оператору return
, он записывается в файл.
Другое дело, что при этом возникает много нюансов. Самый главный из них, ‒ если вы вносите изменение в название хотя бы одной ссылки, придется перезаписать все html-файлы, так как меню непосредственно включено в код статичных страниц. И потом надо будет загрузить все измененные страницы на хостинг. Это не большая проблема, если вы редко правите сайт. Иначе полезным будет знание технологии git.
В четвертых, перед тем, как выгрузить статичный сайт на удаленный сервер, следует проверить его работу на локальном компьютере. Если в "продакшене" мы настраиваем программный веб-сервер так, чтобы скрывать расширения html-файлов, и во внутренних ссылках нет расширений, то без запуска и настройки веб-сервера на локальном компьютере сайт правильно работать не сможет.
Пятое ‒ на удаленном веб-сервере надо изменить настройки Apache. Мы больше не будем запускать там flask-приложение.