Python Pyramid 路由前缀
许多时候,相似的URL模式在多个Python代码模块中使用不同的路由进行注册。举个例子,我们有一个 student_routes.py ,在其中/list和/add URL模式分别与’list’和’add’路由进行注册。与这些路由相关联的视图函数分别是 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()
在调用 students() 函数时,这些路由最终会被注册。
与此同时,还有一个 book_routes.py 文件,其中相同的 URL /list 和 add/ 分别注册到 ‘show’ 和 ‘new’ 路由。它们分别与 list() 和 add() 这两个视图相关联。该模块还有一个 books() 函数,用于添加这些路由。
#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()
显然,’/list’和’/add’两个URL模式分别指向了两个路由,所以必须解决这个冲突。可以通过config.include()方法的 route_prefix 参数来解决。
config.include()的第一个参数是添加路由的函数,第二个参数是将添加函数中使用的URL模式的前缀字符串。
因此,该语句为:
config.include(students, route_prefix='/student')
将导致’/list’ URL模式更改为’/student/list’,而’/add’变为’student/add’。同样地,我们可以在books()函数中为这些URL模式添加前缀。
config.include(books, route_prefix='/books')
示例
启动服务器的代码如下−
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