99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Pyramid Url路由

2023-03-30 17:24 更新

在MVC架構(gòu)出現(xiàn)之前,Web應(yīng)用程序使用的機制是將用戶在瀏覽器中輸入的URL映射到一個程序文件,該文件的輸出被渲染成HTML,并作為一個響應(yīng)返回給瀏覽器。Pyramid框架使用了一種路由機制,URL的端點與應(yīng)用程序注冊表中注冊的不同URL模式相匹配,調(diào)用其映射的視圖并渲染響應(yīng)。

一個典型的URL由三部分組成。協(xié)議(如http:// 或 https://),然后是IP地址或主機名。在主機名之后的URL的剩余部分被稱為路徑或端點。

Python Pyramid - Url Routing

端點后面有一個或多個變量部分構(gòu)成路由。變量部分的標識符被大括號所包圍。例如,對于上述URL,路由是 /blog/{id} 。

WSGI應(yīng)用程序充當一個路由器。它根據(jù)路由圖中存在的URL模式檢查傳入的請求。如果找到一個匹配的,其相關(guān)的視圖可調(diào)用被執(zhí)行并返回響應(yīng)。

路由配置

通過調(diào)用配置器對象的add_route()方法,一個新的路由被添加到應(yīng)用程序中。路由有一個名字,作為一個標識符,用于生成URL和一個模式,旨在與URL的PATH_INFO部分(方案和端口之后的部分,例如,URL http://example.com/blog/1 中的/blog/1 ) 相匹配。

如前所述,add_route()方法的模式參數(shù)可以有一個或多個占位符標識符,用大括號包圍,用/隔開。 以下語句將’index’指定為’/{name}/{age}’模式的路由名稱。

config.add_route('index', '/{name}/{age}')

為了將一個可調(diào)用的視圖關(guān)聯(lián)到這個路由,我們使用add_view()函數(shù),如下所示。

config.add_view(index, route_name='index')

index()函數(shù)應(yīng)該是可用的,以便與之匹配的路由。

def index(request):
   return Response('Root Configuration Example')

例子

我們把這些語句放在下面的程序中-

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response

def index(request):
   return Response('Root Configuration Example')

if __name__ == '__main__':
   with Configurator() as config:
      config.add_route('index', '/{name}/{age}')
      config.add_view(index, route_name='index')
      app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()

輸出

運行上述代碼并 在 瀏覽器 中 訪問 http://localhost:6543/Ravi/21 。由于URL的PATH_INFO與索引路由匹配,顯示如下輸出 ?

Python Pyramid - Url Routing

路由配置中使用的模式通常以一個正斜杠(/)字符開始。模式段(模式中/字符之間的單個項目)既可以是一個字面字符串,也可以是一個置換標記(例如,{name}),或者兩者的某種組合。一個替換標記不需要在前面加上一個/字符。

下面是一些路由模式的例子

/student/{name}/{marks}
/{id}/student/{name}/{marks}
/customer/{id}/item/{itemno}
/{name}/{age}

占位符必須是一個有效的Python標識符。因此,它必須以一個大寫或小寫的ASCII字母或下劃線開始,并且只能有大寫或小寫的ASCII字母、下劃線和數(shù)字。

路線匹配

當傳入的請求與特定路由配置相關(guān)的URL模式相匹配時,一個名為 matchdict 的字典對象被添加為請求對象的一個屬性。

request.matchdict 包含與pattern元素中的替換模式匹配的值。 matchdict 中的鍵是字符串,而其值是Unicode對象。

在前面的例子中,將index()視圖函數(shù)改為以下內(nèi)容 –

def index(request):
   return Response(str(request.matchdict))

瀏覽器以 dict 對象的形式顯示路徑參數(shù)。

Python Pyramid - Url Routing

當請求與路由模式相匹配時,傳遞給視圖函數(shù)的請求對象也包括一個 matched_route 屬性。匹配路由的名稱可以從其name屬性中獲得。

例子

在下面的例子中,我們有兩個視圖函數(shù)student_view()和book_view(),是在@view.config()裝飾器的幫助下定義的。

應(yīng)用程序的注冊表被配置為有兩個相應(yīng)的路由–“student “映射到 “/student/{name}/{age}” 模式,”book “映射到 “/book/{title}/{price}” 模式。我們調(diào)用 配置器 對象的scan()方法來添加這些視圖。

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='student')
def student_view(request):
   return Response(str(request.matchdict))
@view_config(route_name='book')
def book_view(request):
   title=request.matchdict['title']
   price=request.matchdict['price']
   return Response('Title: {}, Price: {}'.format(title,price))
if __name__ == '__main__':
   with Configurator() as config:
      config.add_route('student', '/student/{name}/{age}')
      config.add_route('book', '/book/{title}/{price}')
      config.scan()
      app = config.make_wsgi_app()
   server = make_server('0.0.0.0', 6543, app)
   server.serve_forever()

輸出

當瀏覽器被賦予 http://localhost:6543/student/Ravi/21 URL 時,輸出為

{'name': 'Ravi', 'age': '21'}

如果輸入的URL是 http://localhost:6543/book/Python/300 ,則輸出為

Title: Python, Price: 300


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號