Pyramid 應(yīng)用程序配置

2023-04-03 13:55 更新

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)。

Python Pyramid - 應(yīng)用程序配置


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號