Python Pyramid 简明教程
Python Pyramid - Route Prefix
很多时候,相同的 URL 模式会使用多个 Python 代码模块向不同的路由注册。例如,我们有一个 student_routes.py ,其中 /list 和 /add URL 模式分别向“列表”和“添加”路由注册。与这些路由关联的视图函数分别是 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/ 到“显示”和“新建”路由。它们关联的视图分别是 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()
显然,URL 模式之间存在冲突,因为“/list”和“/add”各指向两个路由,并且必须解决此冲突。这是通过使用 config.include() 方法的 route_prefix 参数来完成的。
config.include() 的第一个参数是添加 route 的函数,第二个参数是 route_prefix 字符串,它将添加到已包含函数中使用的 URL 模式。
因此,语句
config.include(students, route_prefix='/student')
会将“/list”URL 模式更改为 '/student/list',而“/add”变为 'student/add'。类似地,我们可以在 books() 函数中为这些 URL 模式添加前缀。
config.include(books, route_prefix='/books')
Example
用于启动服务器的代码如下 −
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()