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