成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來到九壹網(wǎng)。
搜索
您的當前位置:首頁在Python的Django框架中使用通用視圖的方法

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

來源:九壹網(wǎng)

使用通用視圖的方法是在URLconf文件中創(chuàng)建配置字典,然后把這些字典作為URLconf元組的第三個成員。

例如,下面是一個呈現(xiàn)靜態(tài)“關于”頁面的URLconf:

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

urlpatterns = patterns('',
 (r'^about/$', direct_to_template, {
 'template': 'about.html'
 })
)

一眼看上去似乎有點不可思議,不需要編寫代碼的視圖! 它和第八章中的例子完全一樣:direct_to_template視圖僅僅是直接從傳遞過來的額外參數(shù)獲取信息并用于渲染視圖。

因為通用視圖都是標準的視圖函數(shù),我們可以在我們自己的視圖中重用它。 例如,我們擴展 about例子,把映射的URL從 /about//修改到一個靜態(tài)渲染 about/.html 。 我們首先修改URL配置以指向新的視圖函數(shù):

from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
**from mysite.books.views import about_pages**

urlpatterns = patterns('',
 (r'^about/$', direct_to_template, {
 'template': 'about.html'
 }),
 **(r'^about/(w+)/$', about_pages),**
)

接下來,我們編寫 about_pages 視圖的代碼:

from django.http import Http404
from django.template import TemplateDoesNotExist
from django.views.generic.simple import direct_to_template

def about_pages(request, page):
 try:
 return direct_to_template(request, template="about/%s.html" % page)
 except TemplateDoesNotExist:
 raise Http404()

在這里我們象使用其他函數(shù)一樣使用 direct_to_template 。 因為它返回一個HttpResponse對象,我們只需要簡單的返回它就好了。 這里唯一有點棘手的事情是要處理找不到模板的情況。 我們不希望一個不存在的模板導致一個服務端錯誤,所以我們捕獲TemplateDoesNotExist異常并且返回404錯誤來作為替代。

這里有沒有安全性問題?

眼尖的讀者可能已經(jīng)注意到一個可能的安全漏洞: 我們直接使用從客戶端瀏覽器得到的數(shù)據(jù)構(gòu)造模板名稱(template="about/%s.html" % page )。乍看起來,這像是一個經(jīng)典的 目錄跨越(directory traversal) 攻擊(詳情請看第20章)。 事實真是這樣嗎?

完全不是。 是的,一個惡意的 page 值可以導致目錄跨越,但是盡管 page 是 從請求的URL中獲取的,但并不是所有的值都會被接受。 這就是URL配置的關鍵所在: 我們使用正則表達式 w+ 來從URL里匹配 page ,而 w 只接受字符和數(shù)字。 因此,任何惡意的字符 (例如在這里是點 . 和正斜線 / )將在URL解析時被拒絕,根本不會傳遞給視圖函數(shù)。

Copyright ? 2019- 91gzw.com 版權所有 湘ICP備2023023988號-2

違法及侵權請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬商天勤律師事務所王興未律師提供法律服務