ホームページ > ウェブフロントエンド > jsチュートリアル > Flask の Jinja テンプレートの JSON データを JavaScript で安全に使用するにはどうすればよいですか?

Flask の Jinja テンプレートの JSON データを JavaScript で安全に使用するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-13 06:10:11
オリジナル
913 人が閲覧しました

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

Jinja テンプレートでレンダリングされた JSON データを JavaScript で使用する方法

Flask では、ルートから Jinja テンプレートにデータを渡すときに、自動的にセキュリティの脆弱性を防ぐためにエスケープが有効になっています。ただし、JavaScript でデータを JSON として使用しようとすると、問題が発生する可能性があります。

SyntaxError: Unexpected Token '&'

レンダリングされたデータを使用しようとすると、 JSON.parse で、Jinja が JSON.parse の「&」文字をエスケープするため、エラー「SyntaxError: Unexpected token '&'」が発生します。

tojson フィルターの使用

これを解決するために、Flask はデータを JSON として安全にダンプし、レンダリングしても安全であるとマークする tojson フィルターを提供します。

return render_template('tree.html', tree=tree)
ログイン後にコピー
ログイン後にコピー
<script>var tree = {{ tree|tojson }};</script>
ログイン後にコピー

前の Flask の動作と安全性フィルター

Flask の古いバージョンでは、ダンプされたデータが安全であるとマークされなかったため、次のアプローチが使用されました:

<script>var tree = {{ tree|tojson|safe }};</script>
ログイン後にコピー

ただし、これは必要なくなりました。

JSON を使用しない代替アプローチ

合格しない場合データを JavaScript に渡しますが、Jinja でそれを使用すると、tojson を呼び出さずに元の Python データを渡すことができます:

return render_template('tree.html', tree=tree)
ログイン後にコピー
ログイン後にコピー
{% for item in tree %}
    <li>{{ item }}</li>
{% endfor %}
ログイン後にコピー

Other Options

  • safe Filter: を使用せずにレンダリングしてもデータが安全であるとマークします。
  • マークアップ ラッパー: 文字列をマークアップでラップして、安全なフィルターと同じ効果を実現します。

以上がFlask の Jinja テンプレートの JSON データを JavaScript で安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート