在Python的Django框架中使用通用視圖的方法
使用通用視圖的方法是在URLconf文件中創(chuàng)建配置字典,然后把這些字典作為URLconf元組的第三個成員。
例如,下面是一個呈現(xiàn)靜態(tài)“關(guān)于”頁面的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' }) )
一眼看上去似乎有點(diǎn)不可思議,不需要編寫代碼的視圖! 它和第八章中的例子完全一樣:direct_to_template視圖僅僅是直接從傳遞過來的額外參數(shù)獲取信息并用于渲染視圖。
因為通用視圖都是標(biāo)準(zhǔn)的視圖函數(shù),我們可以在我們自己的視圖中重用它。 例如,我們擴(kuò)展 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對象,我們只需要簡單的返回它就好了。 這里唯一有點(diǎn)棘手的事情是要處理找不到模板的情況。 我們不希望一個不存在的模板導(dǎo)致一個服務(wù)端錯誤,所以我們捕獲TemplateDoesNotExist異常并且返回404錯誤來作為替代。
這里有沒有安全性問題?
眼尖的讀者可能已經(jīng)注意到一個可能的安全漏洞: 我們直接使用從客戶端瀏覽器得到的數(shù)據(jù)構(gòu)造模板名稱(template="about/%s.html" % page )。乍看起來,這像是一個經(jīng)典的 目錄跨越(directory traversal) 攻擊(詳情請看第20章)。 事實真是這樣嗎?
完全不是。 是的,一個惡意的 page 值可以導(dǎo)致目錄跨越,但是盡管 page 是 從請求的URL中獲取的,但并不是所有的值都會被接受。 這就是URL配置的關(guān)鍵所在: 我們使用正則表達(dá)式 \w+ 來從URL里匹配 page ,而 \w 只接受字符和數(shù)字。 因此,任何惡意的字符 (例如在這里是點(diǎn) . 和正斜線 / )將在URL解析時被拒絕,根本不會傳遞給視圖函數(shù)。
相關(guān)文章
在CentOS 7中使用Python 3執(zhí)行系統(tǒng)命令的詳細(xì)教程
使用os.system()這個方法簡單直接,但它不返回命令的輸出,只返回命令的退出狀態(tài),如果你只需要知道命令是否成功執(zhí)行,這個方法就足夠了,這篇文章主要介紹了在CentOS 7中使用Python 3執(zhí)行系統(tǒng)命令的詳細(xì)教程,需要的朋友可以參考下2024-02-02python實現(xiàn)統(tǒng)計文本中單詞出現(xiàn)的頻率詳解
這篇文章主要介紹了python統(tǒng)計文本中單詞出現(xiàn)頻率,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python AutoCAD 系統(tǒng)設(shè)置的實現(xiàn)方法
這篇文章主要介紹了Python AutoCAD 系統(tǒng)設(shè)置的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04pyqt5讓圖片自適應(yīng)QLabel大小上以及移除已顯示的圖片方法
今天小編就為大家分享一篇pyqt5讓圖片自適應(yīng)QLabel大小上以及移除已顯示的圖片方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06python jieba分詞并統(tǒng)計詞頻后輸出結(jié)果到Excel和txt文檔方法
本篇文章主要介紹了python jieba分詞并統(tǒng)計詞頻后輸出結(jié)果到Excel和txt文檔方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02