国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

在Python的Django框架中使用通用視圖的方法

2020-01-04 18:00:51
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了在Python的Django框架中使用通用視圖的方法,同時提到了相關的安全問題,需要的朋友可以參考下
使用通用視圖的方法是在URLconf文件中創建配置字典,然后把這些字典作為URLconf元組的第三個成員。
例如,下面是一個呈現靜態“關于”頁面的URLconf:
  1. from django.conf.urls.defaults import * 
  2. from django.views.generic.simple import direct_to_template 
  3.  
  4. urlpatterns = patterns(''
  5.   (r'^about/$', direct_to_template, { 
  6.     'template''about.html' 
  7.   }) 


一眼看上去似乎有點不可思議,不需要編寫代碼的視圖! 它和第八章中的例子完全一樣:direct_to_template視圖僅僅是直接從傳遞過來的額外參數獲取信息并用于渲染視圖。
因為通用視圖都是標準的視圖函數,我們可以在我們自己的視圖中重用它。 例如,我們擴展 about例子,把映射的URL從 /about//修改到一個靜態渲染 about/.html 。 我們首先修改URL配置以指向新的視圖函數:

  1. from django.conf.urls.defaults import * 
  2. from django.views.generic.simple import direct_to_template 
  3. **from mysite.books.views import about_pages** 
  4.  
  5. urlpatterns = patterns(''
  6.   (r'^about/$', direct_to_template, { 
  7.     'template''about.html' 
  8.   }), 
  9.   **(r'^about/(/w+)/$', about_pages),** 


接下來,我們編寫 about_pages 視圖的代碼:
  1. from django.http import Http404 
  2. from django.template import TemplateDoesNotExist 
  3. from django.views.generic.simple import direct_to_template 
  4.  
  5. def about_pages(request, page): 
  6.   try
  7.     return direct_to_template(request, template="about/%s.html" % page) 
  8.   except TemplateDoesNotExist: 
  9.     raise Http404() 

在這里我們象使用其他函數一樣使用 direct_to_template 。 因為它返回一個HttpResponse對象,我們只需要簡單的返回它就好了。 這里唯一有點棘手的事情是要處理找不到模板的情況。 我們不希望一個不存在的模板導致一個服務端錯誤,所以我們捕獲TemplateDoesNotExist異常并且返回404錯誤來作為替代。
這里有沒有安全性問題?
眼尖的讀者可能已經注意到一個可能的安全漏洞: 我們直接使用從客戶端瀏覽器得到的數據構造模板名稱(template="about/%s.html" % page )。乍看起來,這像是一個經典的 目錄跨越(directory traversal) 攻擊(詳情請看第20章)。 事實真是這樣嗎?
完全不是。 是的,一個惡意的 page 值可以導致目錄跨越,但是盡管 page 是 從請求的URL中獲取的,但并不是所有的值都會被接受。 這就是URL配置的關鍵所在: 我們使用正則表達式 /w+ 來從URL里匹配 page ,而 /w 只接受字符和數字。 因此,任何惡意的字符 (例如在這里是點 . 和正斜線 / )將在URL解析時被拒絕,根本不會傳遞給視圖函數。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 察哈| 金湖县| 闵行区| 洛川县| 崇阳县| 广宁县| 崇左市| 潜山县| 承德市| 金堂县| 绿春县| 无极县| 新化县| 棋牌| 万年县| 西乌珠穆沁旗| 湖南省| 正宁县| 方山县| 望奎县| 柳江县| 万山特区| 奉贤区| 汤阴县| 惠州市| 商河县| 沅陵县| 北川| 黎川县| 太仓市| 博湖县| 灌阳县| 留坝县| 扎兰屯市| 津市市| 南郑县| 永平县| 普定县| 九龙坡区| 阆中市| 汾西县|