最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Django框架中編寫Context處理器的方法

 更新時間:2015年07月20日 11:51:39   投稿:goldensun  
這篇文章主要介紹了在Django框架中編寫Context處理器的方法,Django是重多高人氣Python框架中最為著名的一個,需要的朋友可以參考下

寫Context處理器的一些建議

編寫處理器的一些建議:

    使每個context處理器完成盡可能小的功能。 使用多個處理器是很容易的,所以你可以根據(jù)邏輯塊來分解功能以便將來復(fù)用。

    要注意 TEMPLATE_CONTEXT_PROCESSORS 里的context processor 將會在基于這個settings.py的每個 模板中有效,所以變量的命名不要和模板的變量沖突。 變量名是大小寫敏感的,所以processor的變量全用大寫是個不錯的主意。

    不論它們存放在哪個物理路徑下,只要在你的Python搜索路徑中,你就可以在 TEMPLATE_CONTEXT_PROCESSORS 設(shè)置里指向它們。 建議你把它們放在應(yīng)用或者工程目錄下名為 context_processors.py 的文件里。

html自動轉(zhuǎn)意

從模板生成html的時候,總是有一個風(fēng)險——變量包了含會影響結(jié)果html的字符。 例如,考慮這個模板片段:

Hello, {{ name }}.

一開始,這看起來是顯示用戶名的一個無害的途徑,但是考慮如果用戶輸入如下的名字將會發(fā)生什么:

<script>alert('hello')</script>

用這個用戶名,模板將被渲染成:

Hello, <script>alert('hello')</script>

這意味著瀏覽器將彈出JavaScript警告框!

類似的,如果用戶名包含小于符號,就像這樣:

用戶名

那樣的話模板結(jié)果被翻譯成這樣:

Hello, <b>username

頁面的剩余部分變成了粗體!

顯然,用戶提交的數(shù)據(jù)不應(yīng)該被盲目信任,直接插入到你的頁面中。因為一個潛在的惡意的用戶能夠利用這類漏洞做壞事。 這類漏洞稱為被跨域腳本 (XSS) 攻擊。 關(guān)于安全的更多內(nèi)容,請看20章

為了避免這個問題,你有兩個選擇:

    一是你可以確保每一個不被信任的變量都被escape過濾器處理一遍,把潛在有害的html字符轉(zhuǎn)換為無害的。 這是最初幾年Django的默認(rèn)方案,但是這樣做的問題是它把責(zé)任推給你(開發(fā)者、模版作者)自己,來確保把所有東西轉(zhuǎn)意。 很容易就忘記轉(zhuǎn)意數(shù)據(jù)。

    二是,你可以利用Django的自動html轉(zhuǎn)意。 這一章的剩余部分描述自動轉(zhuǎn)意是如何工作的。

在django里默認(rèn)情況下,每一個模板自動轉(zhuǎn)意每一個變量標(biāo)簽的輸出。 尤其是這五個字符。

  •     ``\ ``
  •     System Message: WARNING/2 (<string>, line 491); backlink
  •     Inline literal start-string without end-string.
  •     > 被轉(zhuǎn)換為>
  •     '(單引號)被轉(zhuǎn)換為'
  •     "(雙引號)被轉(zhuǎn)換為"
  •     & is converted to &

另外,我強(qiáng)調(diào)一下這個行為默認(rèn)是開啟的。 如果你正在使用django的模板系統(tǒng),那么你是被保護(hù)的。
如何關(guān)閉它

如果你不想數(shù)據(jù)被自動轉(zhuǎn)意,在每一站點級別、每一模板級別或者每一變量級別你都有幾種方法來關(guān)閉它。

為什么要關(guān)閉它? 因為有時候模板變量包含了一些原始html數(shù)據(jù),在這種情況下我們不想它們的內(nèi)容被轉(zhuǎn)意。 例如,你可能在數(shù)據(jù)庫里存儲了一段被信任的html代碼,并且你想直接把它嵌入到你的模板里。 或者,你可能正在使用Django的模板系統(tǒng)生成非html文本,比如一封e-mail。
對于單獨的變量

用safe過濾器為單獨的變量關(guān)閉自動轉(zhuǎn)意:

This will be escaped: {{ data }}
This will not be escaped: {{ data|safe }}

你可以把safe當(dāng)做safe from further escaping的簡寫,或者當(dāng)做可以被直接譯成HTML的內(nèi)容。在這個例子里,如果數(shù)據(jù)包含'',那么輸出會變成:

This will be escaped: &lt;b&gt;
This will not be escaped: <b>

對于模板塊

為了控制模板的自動轉(zhuǎn)意,用標(biāo)簽autoescape來包裝整個模板(或者模板中常用的部分),就像這樣:

{% autoescape off %}
 Hello {{ name }}
{% endautoescape %}

autoescape 標(biāo)簽有兩個參數(shù)on和off 有時,你可能想阻止一部分自動轉(zhuǎn)意,對另一部分自動轉(zhuǎn)意。 這是一個模板的例子:

Auto-escaping is on by default. Hello {{ name }}

{% autoescape off %}
 This will not be auto-escaped: {{ data }}.

 Nor this: {{ other_data }}
 {% autoescape on %}
 Auto-escaping applies again: {{ name }}
 {% endautoescape %}
{% endautoescape %}

auto-escaping 標(biāo)簽的作用域不僅可以影響到當(dāng)前模板還可以通過include標(biāo)簽作用到其他標(biāo)簽,就像block標(biāo)簽一樣。 例如:

# base.html

{% autoescape off %}
<h1>{% block title %}{% endblock %}</h1>
{% block content %}
{% endblock %}
{% endautoescape %}

# child.html

{% extends "base.html" %}
{% block title %}This & that{% endblock %}
{% block content %}{{ greeting }}{% endblock %}

由于在base模板中自動轉(zhuǎn)意被關(guān)閉,所以在child模板中自動轉(zhuǎn)意也會關(guān)閉.因此,在下面一段HTML被提交時,變量greeting的值就為字符串Hello!

<h1>This & that</h1>
<b>Hello!</b>

備注

通常,模板作者沒必要為自動轉(zhuǎn)意擔(dān)心. 基于Pyhton的開發(fā)者(編寫VIEWS視圖和自定義過濾器)只需要考慮哪些數(shù)據(jù)不需要被轉(zhuǎn)意,適時的標(biāo)記數(shù)據(jù),就可以讓它們在模板中工作。

如果你正在編寫一個模板而不知道是否要關(guān)閉自動轉(zhuǎn)意,那就為所有需要轉(zhuǎn)意的變量添加一個escape過濾器。 當(dāng)自動轉(zhuǎn)意開啟時,使用escape過濾器似乎會兩次轉(zhuǎn)意數(shù)據(jù),但其實沒有任何危險。因為escape過濾器不作用于被轉(zhuǎn)意過的變量。

相關(guān)文章

  • Python編寫車票訂購系統(tǒng)?Python實現(xiàn)快遞收費系統(tǒng)

    Python編寫車票訂購系統(tǒng)?Python實現(xiàn)快遞收費系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python編寫車票訂購系統(tǒng),Python實現(xiàn)快遞收費系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 教你兩步解決conda安裝pytorch時下載速度慢or超時的問題

    教你兩步解決conda安裝pytorch時下載速度慢or超時的問題

    這篇文章主要介紹了教你兩步解決conda安裝pytorch時下載速度慢or超時的問題,使用清華鏡像源可以大大減少安裝的時間,需要的朋友可以參考下
    2023-03-03
  • pytorch 實現(xiàn)張量tensor,圖片,CPU,GPU,數(shù)組等的轉(zhuǎn)換

    pytorch 實現(xiàn)張量tensor,圖片,CPU,GPU,數(shù)組等的轉(zhuǎn)換

    今天小編就為大家分享一篇pytorch 實現(xiàn)張量tensor,圖片,CPU,GPU,數(shù)組等的轉(zhuǎn)換,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python通過cython加密代碼

    python通過cython加密代碼

    這篇文章主要介紹了python通過cython實現(xiàn)加密的示例代碼,幫助大家加密自己的python代碼,提高安全性,感興趣的朋友可以參考下
    2020-12-12
  • 關(guān)于Pytorch中模型的保存與遷移問題

    關(guān)于Pytorch中模型的保存與遷移問題

    在本篇文章中,筆者首先介紹了模型復(fù)用的幾種典型場景;然后介紹了如何查看Pytorch模型中的相關(guān)參數(shù)信息;接著介紹了如何載入模型、如何進(jìn)行追加訓(xùn)練以及進(jìn)行模型的遷移學(xué)習(xí)等,需要的朋友可以參考下
    2021-10-10
  • django之如何按日期查詢數(shù)據(jù)

    django之如何按日期查詢數(shù)據(jù)

    這篇文章主要介紹了django之如何按日期查詢數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 詳解Python描述符的工作原理

    詳解Python描述符的工作原理

    在 Python 開發(fā)中,你可能聽說過「描述符」這個概念,由于我們很少直接使用它,所以大部分開發(fā)人員并不了解它的原理. 但作為熟練使用 Python,想要進(jìn)階的你,建議還是了解一下描述符的原理,這也便于你更深層次地理解 Python 的設(shè)計思想,需要的朋友可以參考下
    2021-06-06
  • 淺談Python之Django(三)

    淺談Python之Django(三)

    這篇文章主要介紹了Python3中的Django,小編覺得這篇文章寫的還不錯,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧,希望能夠給你帶來幫助
    2021-10-10
  • Pytorch DataLoader 變長數(shù)據(jù)處理方式

    Pytorch DataLoader 變長數(shù)據(jù)處理方式

    今天小編就為大家分享一篇Pytorch DataLoader 變長數(shù)據(jù)處理方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python自制圖像批量壓縮工具

    Python自制圖像批量壓縮工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python自制一個圖像批量壓縮工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04

最新評論

洛扎县| 漳州市| 巨鹿县| 玛纳斯县| 镇江市| 本溪市| 台山市| 黑水县| 自贡市| 新田县| 常山县| 大同市| 北川| 罗平县| 陆良县| 沅陵县| 临泉县| 苍南县| 乌兰浩特市| 诏安县| 宁河县| 壶关县| 西畴县| 桑植县| 松溪县| 潞西市| 翁牛特旗| 平凉市| 扬州市| 黎平县| 太谷县| 淄博市| 类乌齐县| 兴国县| 商城县| 防城港市| 乌鲁木齐县| 冕宁县| 南江县| 阿克陶县| 武安市|