В действительности, этот пример иллюстрирует очень важный принцип, используемый при создании крупных веб-сайтов: если приложить все силы, чтобы отделить разметку HTML от программного кода сценариев, в результате получается весьма удобное разделение на отображение и логику обработки — каждая часть может разрабатываться независимо, людьми с разной специализацией. Веб-дизайнеры, например, могут работать над интерфейсом, а программисты — над логикой выполнения. Несмотря на небольшую величину примера, представленного в этом разделе, он уже выигрывает от такого отделения страницы с формой ввода. В некоторых случаях добиться подобного отделения бывает сложнее, потому что наши примеры сценариев содержат внутри разметку HTML страниц ответов. Однако стоит приложить совсем немного усилий, и мы сможем вынести разметку HTML страницы ответа в отдельный файл, которую также можно будет разрабатывать отдельно от логики сценария. Например, строку html, присутствующую в сценарии tu tor5.py (пример 15.12), можно было бы сохранить в текстовом файле и загружать его во время выполнения сценария.
В крупных системах отделение логики от отображения может достигаться еще проще, с помощью таких инструментов, как механизмы шаблонов HTML, действующих на стороне сервера. Система Python Server Pages и фреймворки, такие как Zope и Django, например, способствуют отделению логики и отображения, предоставляя языки описания страниц ответов, которые позволяют включать фрагменты, сгенерированные логикой программ на языке Python. В некотором смысле языки шаблонов, применяемые на стороне сервера, встраивают программный код на языке Python в разметку HTML — в противоположность CGI-сценариям, которые встраивают разметку HTML в программный код Python, — и способны обеспечить более четкое разделение труда, позволяя оформлять программный код Python в виде отдельных компонентов. Подробности по этой теме ищите в Интернете. Аналогичные приемы можно использовать для отделения отображения и логики работы в графических интерфейсах, которые мы изучали ранее в этой книге, но для достижения поставленных целей они также требуют использования крупных фреймворков или моделей.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011