Python Pyramid Url路由

Python Pyramid Url路由

在MVC架构出现之前,Web应用程序使用的机制是将用户在浏览器中输入的URL映射到一个程序文件,该文件的输出被渲染成HTML,并作为一个响应返回给浏览器。Pyramid框架使用了一种路由机制,URL的端点与应用程序注册表中注册的不同URL模式相匹配,调用其映射的视图并渲染响应。

一个典型的URL由三部分组成。协议(如http:// 或 https://),然后是IP地址或主机名。在主机名之后的URL的剩余部分被称为路径或端点。

Python Pyramid - Url Routing

端点后面有一个或多个变量部分构成路由。变量部分的标识符被大括号所包围。例如,对于上述URL,路由是 /blog/{id}

WSGI应用程序充当一个路由器。它根据路由图中存在的URL模式检查传入的请求。如果找到一个匹配的,其相关的视图可调用被执行并返回响应。

路由配置

通过调用配置器对象的add_route()方法,一个新的路由被添加到应用程序中。路由有一个名字,作为一个标识符,用于生成URL和一个模式,旨在与URL的PATH_INFO部分(方案和端口之后的部分,例如,URL http://example.com/blog/1 中的/blog/1 相匹配。

如前所述,add_route()方法的模式参数可以有一个或多个占位符标识符,用大括号包围,用/隔开。 以下语句将’index’指定为’/{name}/{age}’模式的路由名称。

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

为了将一个可调用的视图关联到这个路由,我们使用add_view()函数,如下所示。

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

index()函数应该是可用的,以便与之匹配的路由。

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字母、下划线和数字。

路线匹配

当传入的请求与特定路由配置相关的URL模式相匹配时,一个名为 matchdict 的字典对象被添加为请求对象的一个属性。

request.matchdict 包含与pattern元素中的替换模式匹配的值。 matchdict 中的键是字符串,而其值是Unicode对象。

在前面的例子中,将index()视图函数改为以下内容 –

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

浏览器以 dict 对象的形式显示路径参数。

Python Pyramid - Url Routing

当请求与路由模式相匹配时,传递给视图函数的请求对象也包括一个 matched_route 属性。匹配路由的名称可以从其name属性中获得。

例子

在下面的例子中,我们有两个视图函数student_view()和book_view(),是在@view.config()装饰器的帮助下定义的。

应用程序的注册表被配置为有两个相应的路由–“student “映射到 “/student/{name}/{age}” 模式,”book “映射到 “/book/{title}/{price}” 模式。我们调用 配置器 对象的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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程