Pyramid應(yīng)用程序?qū)ο笥幸粋€(gè)應(yīng)用程序注冊(cè)表,用于存儲(chǔ)視圖函數(shù)與路由的映射,以及其他特定應(yīng)用程序的組件注冊(cè)。配置器類(lèi)被用來(lái)建立應(yīng)用注冊(cè)表。
配置器的生命周期是由一個(gè)返回應(yīng)用程序?qū)ο蟮纳舷挛墓芾砥鞴芾淼摹?/p>
with Configurator(settings=settings) as config:
#configuration methods
app = config.make_wsgi_app()
配置器類(lèi)定義了以下重要的方法來(lái)定制應(yīng)用程序 —
add_route()
這個(gè)方法為URL調(diào)度注冊(cè)了一個(gè)路由。以下參數(shù)被使用 –
- name – 第一個(gè)必要的位置參數(shù)必須是路由的唯一名稱(chēng)。這個(gè)名字在注冊(cè)視圖或生成URL時(shí)用來(lái)識(shí)別路由。
pattern – 第二個(gè)必要的位置參數(shù)是一個(gè)代表URL路徑的字符串,可以選擇包含變量占位符,用于解析URL中的變量數(shù)據(jù)。占位符由大括號(hào)包圍。例如,”/students/{id}”。
request_method – 這個(gè)值可以是 “GET”、”P(pán)OST”、”HEAD”、”DELETE”、”P(pán)UT “中的一個(gè)。只有這種類(lèi)型的請(qǐng)求才會(huì)被匹配到路由中。
add_view()
該方法在應(yīng)用程序注冊(cè)表中添加一個(gè)視圖配置。它將一個(gè)視圖函數(shù)綁定到配置中的 route_name 上。需要的參數(shù)是 –
- view – 視圖函數(shù)的名稱(chēng)。
route_name – 一個(gè)字符串,必須與路由配置聲明的名稱(chēng)一致。
request_method – 代表HTTP REQUEST_METHOD的字符串(如 “GET”、”P(pán)OST”、”P(pán)UT”、”DELETE”、”HEAD “或 “OPTIONS”),或者包含一個(gè)或多個(gè)這些字符串的元組。
add_static_view()
該方法添加一個(gè) 視圖 ,用于渲染靜態(tài)資產(chǎn),如圖片和CSS文件,并使用以下參數(shù)—-。
- name – 這個(gè)參數(shù)是一個(gè)字符串,代表一個(gè)與應(yīng)用程序相關(guān)的本地URL前綴,或者一個(gè)完整的URL。
Path – 這個(gè)參數(shù)表示靜態(tài)文件所在磁盤(pán)上的路徑。它的值可以是一個(gè)絕對(duì)路徑或一個(gè)與包相關(guān)的路徑。
這個(gè)方法反過(guò)來(lái)調(diào)用Configurator對(duì)象的 add_route() 方法。
add_notfound_view()
當(dāng)當(dāng)前請(qǐng)求找不到匹配的視圖時(shí),該方法會(huì)添加一個(gè)視圖來(lái)執(zhí)行。下面的代碼顯示了一個(gè)例子 –
from pyramid.config import Configurator
from pyramid.response import Response
def notfound(request):
return Response('Not Found', status='404 Not Found')
config.add_notfound_view(notfound)
add_forbidden_view()
配置應(yīng)用程序注冊(cè)表,以便定義一個(gè)視圖,在出現(xiàn)HTTPForbidden異常時(shí)被執(zhí)行。參數(shù)列表中包含對(duì)一個(gè)返回403狀態(tài)響應(yīng)的函數(shù)的引用。如果沒(méi)有提供參數(shù),注冊(cè)表會(huì)添加 default_exceptionresponse_view()。
add_exception_view()
該方法導(dǎo)致在配置中添加一個(gè)異常視圖函數(shù),用于指定的異常。
make_wsgi_app()
該方法返回一個(gè)Pyramid WSGI應(yīng)用程序?qū)ο蟆?/p>
scan()
這是一個(gè)注冊(cè)視圖的封裝器。它導(dǎo)入所有應(yīng)用程序模塊,尋找@view_config裝飾器。
對(duì)于每一個(gè)模塊,它用相同的關(guān)鍵字參數(shù)調(diào)用config.add_view(view)。對(duì)scan()函數(shù)的調(diào)用執(zhí)行了對(duì)包和所有子包的所有裝飾的掃描。
一個(gè)典型的執(zhí)行應(yīng)用程序注冊(cè)表配置的語(yǔ)句序列如下代碼片斷所示
from pyramid.config import Configurator
with Configurator() as config:
config.add_route('hello', '/')
config.add_view(hello_world, route_name='hello')
app = config.make_wsgi_app()
這種對(duì)應(yīng)用程序進(jìn)行配置的方法被稱(chēng)為強(qiáng)制性配置。Pyramid提供了另一種配置方法,稱(chēng)為裝飾性配置。
聲明性配置
有時(shí),通過(guò)命令式代碼進(jìn)行配置會(huì)變得很困難,尤其是當(dāng)應(yīng)用程序的代碼分布在許多文件中時(shí)。聲明式配置是一種方便的方法。 pyramid.view 模型定義了 view_config --一個(gè)函數(shù)、類(lèi)或方法裝飾器–它允許在非常接近視圖函數(shù)本身定義的情況下進(jìn)行視圖注冊(cè)。
兩個(gè)重要的參數(shù)被提供給 @view_config() 裝飾器。它們是 route_name 和 request_method。 它們的解釋與Configurator類(lèi)的 add_route() 方法相同。就在它下面的函數(shù)被裝飾了,所以它被綁定到添加到應(yīng)用程序?qū)ο蟮淖?cè)表的路由上。
下面是 hello_world() 視圖函數(shù)的聲明性配置的例子。
from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name='hello', request_method='GET')
def hello_world(request):
return Response('Hello World!')
?view_config
?裝飾器為?hello_world()
?函數(shù)添加了一個(gè)屬性,使其在以后的掃描中可以找到。
例子
配置裝飾和調(diào)用掃描的組合被統(tǒng)稱(chēng)為聲明式配置。下面的代碼用聲明式方法配置了應(yīng)用程序注冊(cè)表。
?scan()
?函數(shù)發(fā)現(xiàn)了路由和其映射的視圖,因此需要添加強(qiáng)制性的配置語(yǔ)句。
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name='hello', request_method='GET')
def hello_world(request):
return Response('Hello World!')
if __name__ == '__main__':
with Configurator() as config:
config.add_route('hello', '/')
config.scan()
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
掃描器將?view_config
?的參數(shù)轉(zhuǎn)換為對(duì)?pyramid.config.Configurator.add_view()
?方法的調(diào)用,因此該操作等同于以下語(yǔ)句 ?
config.add_view(hello_world, route_name='hello', request_method='GET')
輸出
上述程序運(yùn)行后,WSGI服務(wù)器啟動(dòng)。當(dāng)瀏覽器訪(fǎng)問(wèn)鏈接?http://localhost:6543/
?,”Hello World “的信息會(huì)像以前一樣呈現(xiàn)。
更多建議: