很多時候,類似的URL模式在不止一個Python代碼模塊中被注冊為不同的路由。例如,我們有一個 student_routes.py ,其中/list和/add的URL模式被注冊為’list’和’add’路由。與這些路由相關(guān)的視圖函數(shù)分別是 list() 和 add() 。
#student_routes.py
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config( route_name='add')
def add(request):
return Response('add student')
@view_config(route_name='list')
def list(request):
return Response('Student list')
def students(config):
config.add_route('list', '/list')
config.add_route('add', '/add')
config.scan()
這些路由最終會在調(diào)用 students() 函數(shù)時被注冊。
同時,還有book_routes.py,其中相同的URL /list 和 add/ 被注冊到’show’和’new’路由中。它們相關(guān)的視圖分別是list()和add()。該模塊有 books() 函數(shù),用于添加路由。
#book_routes.py
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config( route_name='new')
def add(request):
return Response('add book')
@view_config(route_name='show')
def list(request):
return Response('Book list')
def books(config):
config.add_route('show', '/list')
config.add_route('new', '/add')
config.scan()
很明顯,URL模式之間存在沖突,因為’/list’和’/add’分別指向兩條路由,這個沖突必須解決。這可以通過使用 config.include() 方法的 route_prefix 參數(shù)來完成。
config.include()的第一個參數(shù)是添加路由的函數(shù),第二個參數(shù)是route_prefix字符串,它將被預(yù)加到包含的函數(shù)中使用的URL模式。
因此,語句中
config.include(students, route_prefix='/student')
將導(dǎo)致’/list’URL模式變?yōu)椤?student/list’,’/add’變?yōu)椤痵tudent/add’。同樣地,我們可以在books()函數(shù)中為這些URL模式添加前綴。
config.include(books, route_prefix='/books')
啟動服務(wù)器的代碼如下所示
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from student_routes import students
from book_routes import books
if __name__ == '__main__':
with Configurator() as config:
config.include(students, route_prefix='/student')
config.include(books, route_prefix='/book')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
讓我們運行上述代碼,并通過以下CURL命令測試路線。
C:\Users\Acer>curl localhost:6543/student/list
Student list
C:\Users\Acer>curl localhost:6543/student/add
add student
C:\Users\Acer>curl localhost:6543/book/add
add book
C:\Users\Acer>curl localhost:6543/book/list
Book list
更多建議: