Maison >interface Web >js tutoriel >Comment utiliser en toute sécurité les données JSON des modèles Jinja de Flask en JavaScript ?

Comment utiliser en toute sécurité les données JSON des modèles Jinja de Flask en JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-13 06:10:11918parcourir

How to Safely Use JSON Data from Flask's Jinja Templates in JavaScript?

Comment utiliser les données JSON rendues dans les modèles Jinja avec JavaScript

Dans Flask, lors du transfert de données d'un itinéraire vers un modèle Jinja, automatique l'échappement est activé pour éviter les failles de sécurité. Cependant, cela peut entraîner des problèmes lors de la tentative d'utilisation des données au format JSON dans JavaScript.

SyntaxError : Unexpected Token '&'

Lorsque vous essayez d'utiliser les données rendues avec JSON.parse, l'erreur "SyntaxError: Unexpected token '&'" se produit car Jinja échappe au caractère "&" dans le sortie.

Utilisation du filtre tojson

Pour résoudre ce problème, Flask fournit le filtre tojson qui vide en toute sécurité les données au format JSON et les marque comme sûres pour le rendu :

return render_template('tree.html', tree=tree)
<script>var tree = {{ tree|tojson }};</script>

Comportement du flacon précédent et sécurité Filtre

Les anciennes versions de Flask ne marquaient pas les données sauvegardées comme sûres, l'approche suivante a donc été utilisée :

<script>var tree = {{ tree|tojson|safe }};</script>

Cependant, cela n'est plus nécessaire.

Approche alternative sans JSON

Si vous ne transmettez pas les données à JavaScript mais que vous les utilisez dans Jinja, vous pouvez transmettre les données Python d'origine sans appeler tojson :

return render_template('tree.html', tree=tree)
{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}

Autres options

  • Filtre sécurisé : Marque les données comme sûres pour le rendu sans s'échapper.
  • Marquage Wrapper : Enveloppe la chaîne dans Markup pour obtenir le même effet que le filtre sécurisé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn