Генерация HTML из Python не带来乐趣,и на самом деле довольно хлопотно, потому что вам приходится самостоятельно выполнять экранирование HTML с помощью escape, чтобы обеспечить безопасность приложения. Именно поэтому Flask автоматически настраивает Jinja2 template engine для вас. Шаблоны можно использовать для генерации любого типа текстовых файлов. Для веб-приложений вы в основном будете генерировать HTML-страницы, но вы также можете сгенерировать markdown, простой текст для электронных писем и что-либо еще.
В этом лабе мы узнаем, как использовать Jinja2 template engine для генерации безопасных и динамических шаблонов.
Отобразить шаблон
В этом шаге вы реализуете отображение шаблонов с использованием Jinja2 template engine.
Откройте файл rendering_templates.py и сначала импортируйте класс Flask и render_template. Затем создайте экземпляр класса Flask.
from flask import Flask, render_template
app = Flask(__name__)
Далее мы используем декоратор route() для создания двух маршрутов, / и /<name>, для совместного использования одной view-функции под названием hello. Для отображения шаблона вы можете использовать метод render_template(). Он предоставляется Flask для отображения шаблонов с использованием Jinja2 template engine. Все, что вам нужно сделать, - это указать имя шаблона и переменные, которые вы хотите передать в template engine в виде именованных аргументов. В view-функции мы используем метод render_template() для отображения шаблона hello.html с переменной под названием name.
Создайте main точку входа скрипта для запуска Flask-приложения на определенном порту (например, port=5000). Затем включите режим debug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
Flask по умолчанию будет искать шаблоны в папке templates. Поэтому нам нужно создать папку с именем templates и создать в этой папке файл с именем hello.html. Мы можем создать необходимую папку и файл, выполнив следующую команду в терминале.
cd ~/project
mkdir templates
cd templates
touch hello.html
Откройте файл templates/hello.html и напишите следующий код:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
В приведенном выше коде используется условный блок в Jinja2. Он проверяет, является ли переменная name истинной (не None и не пустой). Если да, то будет отображаться содержимое Hello {{ name }}!. В противном случае будет отображаться содержимое Hello, World!.
Чтобы запустить приложение, сначала используйте следующие команды для запуска Flask-приложения в терминале:
cd ~/project
python3 rendering_templates.py
Затем откройте вкладку "Web 5000", расположенную в верхней части интерфейса, и обновите интерфейс. Затем вы должны увидеть, что на странице отображается Hello, World!.
Для маршрута /<name> вы можете добавить суффикс непосредственно в адресной строке выше. Например, ниже в адресной строке с портом 5000 введен суффикс flask, и в качестве вывода отображается Hello, flask!.
Вы можете попробовать разные пути /<name> в адресной строке, и вывод также будет изменяться соответственно.
Резюме
В этом лабе мы узнали, как отображать наши шаблоны с использованием Jinja2 template engine с помощью метода render_template(). Этот метод не только ярко отображает шаблоны, но и позволяет автоматически экранировать, что помогает предотвратить потенциальные атаки XSS.