Générer des modèles dynamiques sécurisés avec Jinja2

FlaskBeginner
Pratiquer maintenant

Introduction

Générer du HTML à partir de Python n'est pas amusant et est en fait assez fastidieux car vous devez effectuer l'échappement HTML avec escape vous-même pour maintenir la sécurité de l'application. C'est pourquoi Flask configure automatiquement le Jinja2 template engine pour vous. Les modèles peuvent être utilisés pour générer tout type de fichier texte. Pour les applications web, vous générerez principalement des pages HTML, mais vous pouvez également générer du markdown, du texte brut pour les e-mails et tout autre chose.

Dans ce laboratoire, nous allons apprendre à utiliser le moteur de modèles Jinja2 pour générer des modèles sécurisés et dynamiques.

Rendre un modèle

Dans cette étape, vous allez implémenter le rendu de modèles avec le moteur de modèles Jinja2.

  1. Ouvrez le fichier rendering_templates.py et importez d'abord la classe Flask et render_template. Ensuite, créez une instance de la classe Flask.
from flask import Flask, render_template
app = Flask(__name__)
  1. Ensuite, nous utilisons le décorateur route() pour créer deux routes, / et /<name>, pour partager une fonction de vue appelée hello. Pour rendre un modèle, vous pouvez utiliser la méthode render_template(). Elle est fournie par Flask pour rendre des modèles avec le moteur de modèles Jinja2. Tout ce que vous avez à faire est de fournir le nom du modèle et les variables que vous voulez passer au moteur de modèles en tant qu'arguments nommés. Dans la fonction de vue, nous utilisons la méthode render_template() pour rendre le modèle hello.html avec une variable appelée name.
@app.route('/')
@app.route('/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)
  1. Créez un point d'entrée principal main du script pour démarrer l'application Flask sur un port (par exemple, port=5000). Ensuite, activez le mode debug.
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)
  1. Flask cherchera les modèles dans le dossier templates par défaut. Nous devons donc créer un dossier nommé templates et créer le fichier nommé hello.html dans ce dossier. Nous pouvons créer le dossier et le fichier requis en exécutant la commande suivante dans le terminal.
cd ~/project
mkdir templates
cd templates
touch hello.html
  1. Ouvrez le fichier templates/hello.html et écrivez le code suivant :
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}

Le code ci-dessus utilise le bloc conditionnel dans Jinja2. Il vérifie si la variable name est évaluée comme vraie (pas None ou vide). Si c'est le cas, le contenu Hello {{ name }}! sera affiché. Sinon, le contenu Hello, World! sera affiché.

  1. Pour exécuter l'application, utilisez d'abord les commandes suivantes pour lancer l'application Flask dans le terminal :
cd ~/project
python3 rendering_templates.py
  1. Ensuite, ouvrez l'onglet "Web 5000" situé en haut de l'interface et actualisez l'interface. Ensuite, vous devriez voir la page afficher Hello, World!.
Flask application output
Flask application running output
  1. Pour la route /<name>, vous pouvez ajouter un suffixe directement dans la barre d'adresse URL ci-dessus. Par exemple, ci-dessous est un suffixe flask entré dans la barre d'adresse URL avec le port 5000, et il affiche Hello, flask! comme sortie.

Flask route name example
Vous pouvez essayer différents chemins /<name> dans la barre d'adresse URL, la sortie changera également en conséquence.

Résumé

Dans ce laboratoire, nous avons appris à rendre nos modèles à l'aide du moteur de modèles Jinja2 en utilisant la méthode render_template(). Cette méthode ne rend pas seulement les modèles de manière vivante, mais active également l'échappement automatique, ce qui aide à prévenir les attaques XSS potentiellement dangereuses.