轉(zhuǎn)義
轉(zhuǎn)義的概念是,在模板渲染字符串的時候,字符串有可能包括一些非常危險的字符比如<、>等,這些字符會破壞掉原來HTML標(biāo)簽的結(jié)構(gòu),更嚴(yán)重的可能會發(fā)生XSS跨域腳本攻擊,因此如果碰到<、>這些字符的時候,應(yīng)該轉(zhuǎn)義成HTML能正確表示這些字符的寫法,比如>在HTML中應(yīng)該用<來表示等。
但是Flask中默認(rèn)沒有開啟全局自動轉(zhuǎn)義,針對那些以.html、.htm、.xml和.xhtml結(jié)尾的文件,如果采用render_template函數(shù)進(jìn)行渲染的,則會開啟自動轉(zhuǎn)義。并且當(dāng)用render_template_string函數(shù)的時候,會將所有的字符串進(jìn)行轉(zhuǎn)義后再渲染。而對于Jinja2默認(rèn)沒有開啟全局自動轉(zhuǎn)義,作者有自己的原因:
- 渲染到模板中的字符串并不是所有都是危險的,大部分還是沒有問題的,如果開啟自動轉(zhuǎn)義,那么將會帶來大量的不必要的開銷。
-
Jinja2很難獲取當(dāng)前的字符串是否已經(jīng)被轉(zhuǎn)義過了,因此如果開啟自動轉(zhuǎn)義,將對一些已經(jīng)被轉(zhuǎn)義過的字符串發(fā)生二次轉(zhuǎn)義,在渲染后會破壞原來的字符串。
在沒有開啟自動轉(zhuǎn)義的模式下(比如以.conf結(jié)尾的文件),對于一些不信任的字符串,可以通過{{ content_html|e }}或者是{{ content_html|escape }}的方式進(jìn)行轉(zhuǎn)義。在開啟了自動轉(zhuǎn)義的模式下,如果想關(guān)閉自動轉(zhuǎn)義,可以通過{{ content_html|safe }}的方式關(guān)閉自動轉(zhuǎn)義。而{%autoescape true/false%}...{%endautoescape%}可以將一段代碼塊放在中間,來關(guān)閉或開啟自動轉(zhuǎn)義,例如以下代碼關(guān)閉了自動轉(zhuǎn)義:
{% autoescape false %}
<p>autoescaping is disabled here
<p>{{ will_not_be_escaped }}
{% endautoescape %}
如果想深入學(xué)習(xí)Flask,可以觀看這套免費Flask教學(xué)視頻:Flask入門到項目實戰(zhàn)
</article>
版權(quán)聲明: https://blog.csdn.net/huangyong1314/article/details/80391805