亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

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

2020-01-04 18:01:41
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了在Django框架中編寫Context處理器的方法,Django是重多高人氣Python框架中最為著名的一個,需要的朋友可以參考下
 

寫Context處理器的一些建議

編寫處理器的一些建議:

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

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

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

 

html自動轉意

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

  1. Hello, {{ name }}. 
 

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

  1. <script>alert('hello')</script> 
?

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

  1. Hello, <script>alert('hello')</script> 
?

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

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

用戶名

那樣的話模板結果被翻譯成這樣:
 

  1. Hello, <b>username 
?

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

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

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

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

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

在django里默認情況下,每一個模板自動轉意每一個變量標簽的輸出。 尤其是這五個字符。

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

另外,我強調一下這個行為默認是開啟的。 如果你正在使用django的模板系統,那么你是被保護的。
如何關閉它

如果你不想數據被自動轉意,在每一站點級別、每一模板級別或者每一變量級別你都有幾種方法來關閉它。

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

用safe過濾器為單獨的變量關閉自動轉意:
 

  1. This will be escaped: {{ data }} 
  2. This will not be escaped: {{ data|safe }} 
?

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

  1. This will be escaped: <b> 
  2. This will not be escaped: <b> 
?

對于模板塊

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

  1. {% autoescape off %} 
  2.  Hello {{ name }} 
  3. {% endautoescape %} 
?

autoescape 標簽有兩個參數on和off 有時,你可能想阻止一部分自動轉意,對另一部分自動轉意。 這是一個模板的例子:
 

  1. Auto-escaping is on by default. Hello {{ name }} 
  2.  
  3. {% autoescape off %} 
  4.  This will not be auto-escaped: {{ data }}. 
  5.  
  6.  Nor this: {{ other_data }} 
  7.  {% autoescape on %} 
  8.  Auto-escaping applies again: {{ name }} 
  9.  {% endautoescape %} 
  10. {% endautoescape %} 
?

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

  1. # base.html 
  2.  
  3. {% autoescape off %} 
  4. <h1>{% block title %}{% endblock %}</h1> 
  5. {% block content %} 
  6. {% endblock %} 
  7. {% endautoescape %} 
  8.  
  9. # child.html 
  10.  
  11. {% extends "base.html" %} 
  12. {% block title %}This & that{% endblock %} 
  13. {% block content %}{{ greeting }}{% endblock %} 
?

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

  1. <h1>This & that</h1> 
  2. <b>Hello!</b> 
?

備注

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2019国产精品自在线拍国产不卡| 欧美在线观看日本一区| 亚洲二区在线播放视频| 色777狠狠综合秋免鲁丝| 亚洲人成伊人成综合网久久久| 国产精品视频久久| 97久久精品在线| 高清欧美性猛交xxxx黑人猛交| 国产女人精品视频| 欧美成人全部免费| 欧美日韩久久久久| 日韩av免费在线| 亚洲精品乱码久久久久久按摩观| 2020国产精品视频| 91久久久亚洲精品| 欧洲精品久久久| 成人免费xxxxx在线观看| 欧美成aaa人片免费看| 欧美片一区二区三区| 久久男人资源视频| 国产精品久久久久久久久粉嫩av| 国产成人免费av电影| 久久婷婷国产麻豆91天堂| 久久久天堂国产精品女人| 日韩精品视频三区| 久久久久久中文字幕| 8090成年在线看片午夜| 久久久久久久久久久av| 这里只有精品在线观看| 色噜噜久久综合伊人一本| 日韩av片免费在线观看| 91九色视频导航| 日韩av片免费在线观看| 国产精品一久久香蕉国产线看观看| 国产一区二区三区久久精品| 久久久久日韩精品久久久男男| 国产欧美一区二区白浆黑人| 日韩福利伦理影院免费| 日本精品va在线观看| 日韩专区在线播放| 国产精品免费网站| 尤物九九久久国产精品的分类| 亚洲第一精品夜夜躁人人爽| 国模吧一区二区| 久久久久久美女| 成人乱人伦精品视频在线观看| 中文字幕日韩电影| 亚洲一区亚洲二区| 在线播放国产一区中文字幕剧情欧美| 亚洲人精选亚洲人成在线| 国产v综合v亚洲欧美久久| 国产精品久久久久久久午夜| 色伦专区97中文字幕| 日韩精品极品视频| 欧美福利小视频| 国产视频久久久久| 日本在线精品视频| 欧美中文字幕视频在线观看| 久久av在线看| 91久久国产综合久久91精品网站| 欧美激情一二区| 国产精品永久免费观看| 国产精品jizz在线观看麻豆| 亚洲国产精品人久久电影| 国产精品扒开腿做爽爽爽的视频| 国产精品久久久久91| 成人在线观看视频网站| 亚洲日本欧美日韩高观看| 亚洲女人被黑人巨大进入| 青青草国产精品一区二区| 国产成人自拍视频在线观看| 81精品国产乱码久久久久久| 欧美性在线观看| 97视频在线观看视频免费视频| 欧美性猛交丰臀xxxxx网站| 国产精品欧美亚洲777777| 热re99久久精品国产66热| 久久久电影免费观看完整版| 欧美成人四级hd版| 国语自产在线不卡| 久久久免费在线观看| 51视频国产精品一区二区| 亚洲欧美国产制服动漫| 久久精品视频在线播放| 欧美一区视频在线| 国产成人精品午夜| 日韩国产激情在线| 日韩69视频在线观看| 国产精品日韩精品| 亚洲国产精品中文| 欧美一级在线亚洲天堂| 精品激情国产视频| 久久久中精品2020中文| 97人洗澡人人免费公开视频碰碰碰| 国产美女久久精品| 久久在线精品视频| 亚洲午夜色婷婷在线| 91最新在线免费观看| 欧美一区三区三区高中清蜜桃| 亚洲日本中文字幕免费在线不卡| 久久综合伊人77777尤物| 欧洲精品在线视频| 亚洲美女av网站| 视频在线一区二区| 国产欧美精品一区二区| 精品动漫一区二区三区| 欧美情侣性视频| 中国日韩欧美久久久久久久久| 黑人精品xxx一区一二区| 久久男人的天堂| 91网在线免费观看| 精品亚洲一区二区三区四区五区| 精品国产一区二区三区久久| 亚洲 日韩 国产第一| 亚洲高清久久久久久| 日韩欧美在线观看视频| 亚洲女人被黑人巨大进入| 亚洲精品在线看| 俺去了亚洲欧美日韩| 久久在精品线影院精品国产| 亚洲专区中文字幕| 久久久久久久亚洲精品| 国内偷自视频区视频综合| 国产精品成熟老女人| 精品久久久久久久久久久| 精品成人69xx.xyz| 91av在线看| 美女久久久久久久久久久| 91在线视频九色| 亚洲成人网在线观看| 中国china体内裑精亚洲片| 日韩中文在线不卡| 欧美日韩国产激情| 国产视频精品久久久| 欧美一级黑人aaaaaaa做受| 97超碰蝌蚪网人人做人人爽| 在线观看国产欧美| 亚洲aⅴ日韩av电影在线观看| 亚洲第一福利在线观看| 亚洲精品久久在线| 日韩三级影视基地| 国产精品高清在线观看| 久久久视频免费观看| 亚洲18私人小影院| 九九热精品视频国产| 国产精品久久电影观看| 欧美日韩999| 国产精品高潮粉嫩av| 午夜精品视频网站| 国产精品一久久香蕉国产线看观看| 欧美日韩国产精品一区二区不卡中文| 91爱爱小视频k| 国产情人节一区| 一个人www欧美| 日韩a**中文字幕| 九九热最新视频//这里只有精品| 成人字幕网zmw| 琪琪亚洲精品午夜在线| 欧美色欧美亚洲高清在线视频| 久久精品影视伊人网| 国产女同一区二区| 国产精品美乳一区二区免费| 成人a级免费视频| 最近2019年日本中文免费字幕|