- Python Pyramid教程
- Python Pyramid - 主页
- Python Pyramid - 概述
- Pyramid - 环境设置
- Python Pyramid - Hello World
- Pyramid - 应用程序配置
- Python Pyramid - URL 路由
- Python Pyramid - 查看配置
- Python Pyramid - 路由前缀
- Python Pyramid - 模板
- Pyramid - HTML 表单模板
- Python Pyramid - 静态资源
- Python Pyramid - 请求对象
- Python Pyramid - 响应对象
- Python Pyramid - 会话
- Python Pyramid - 事件
- Python Pyramid - 消息闪烁
- Pyramid - 使用 SQLAlchemy
- Python Pyramid - Cookiecutter
- Python Pyramid - 创建项目
- Python Pyramid - 项目结构
- Python Pyramid - 包结构
- 手动创建项目
- 命令行Pyramid
- Python Pyramid - 测试
- Python Pyramid - 日志记录
- Python Pyramid - 安全
- Python Pyramid - 部署
- Python Pyramid有用资源
- Python Pyramid - 快速指南
- Python Pyramid - 有用的资源
- Python Pyramid - 讨论
Python Pyramid - URL 路由
在 MVC 架构出现之前,Web 应用程序使用将用户在浏览器中输入的 URL 映射到程序文件的机制,该程序文件的输出呈现为 HTML,作为返回浏览器的响应。Pyramid 框架使用一种路由机制,其中 URL 端点与应用程序注册表中注册的不同 URL 模式相匹配,调用其映射视图并呈现响应。
典型的 URL 由三部分组成: 协议(例如 http:// 或 https://),后跟 IP 地址或主机名。URL 的第一个/主机名之后的剩余部分称为路径或端点。
端点后跟一个或多个可变部分形成路线。可变部分标识符由大括号括起来。例如,对于上面的 URL,路由为/blog/{id}
WSGI 应用程序充当路由器。它根据路由映射中存在的 URL 模式检查传入请求。如果找到匹配项,则执行其关联的视图可调用并返回响应。
路由配置
通过调用 Configurator 对象的 add_route() 方法将新路由添加到应用程序。路由有一个名称,它充当用于 URL 生成的标识符,以及一个用于与 URL 的 PATH_INFO 部分匹配的模式(方案和端口后面的部分,例如 URL 中的 /blog/1 http://example.com/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 与索引路由匹配,因此显示以下输出 -
路由配置中使用的模式通常以正斜杠 (/) 字符开头。模式段(模式中的/ 个字符之间的单个项目)可以是文字字符串,也可以是占位符标记(例如,{name}),或两者的特定组合。替换标记前面不需要有 / 字符。
以下是路线模式的一些示例
/student/{name}/{marks} /{id}/student/{name}/{marks} /customer/{id}/item/{itemno} /{name}/{age}
占位符标识符必须是有效的 Python 标识符。因此,它必须以大写或小写 ASCII 字母或下划线开头,并且只能包含大写或小写 ASCII 字母、下划线和数字。
路线匹配
当传入请求与与特定路由配置关联的 URL 模式匹配时,名为matchdict 的字典对象将添加为请求对象的属性。
request.matchdict包含与模式元素中的替换模式匹配的值。matchdict中的键是字符串,而它们的值是 Unicode 对象。
在前面的示例中,将 index() 视图函数更改为以下 -
def index(request): return Response(str(request.matchdict))
浏览器以dict对象的形式显示路径参数。
当请求与路由模式匹配时,传递给视图函数的请求对象还包含matched_route属性。匹配路由的名称可以从其 name 属性中获取。
例子
在下面的示例中,我们在@view.config()装饰器的帮助下定义了两个视图函数student_view()和book_view()。
应用程序的注册表配置为具有两个相应的路由 - '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