飞道的博客

python--route

365人阅读  评论(0)

routes是用python重新实现的Rails routes系统,用于将url映射到应用程序的actions ,并反过来生成url
它也是在openstack实现restful通信的方式,它被用来做将 URL 映射为 App 的 action,以及为 App的action 产生 URL

两个重要的方法:map.connect (定义映射规则) 和 map.match (获取映射结果)

map.connect映射规则:(map名称,路由地址,controller,action,conditions,requirements)
除了路由地址,其余都是附加参数,对映射进行一些处理
controller:资源控制类
action:资源处理操作
requirements:对输入格式进行限制
conditions:路由方式

map.routematch返回结果:如果匹配到了,会返回一个二元元组,元组第一个元素为匹配到的字典,第二个元素一个Route对象
map.match:比routematch少返回了一个route对象

# !/usr/bin/env python
# coding: utf-8

from routes.mapper import Mapper

# 实例化一个Mapper对象
mapper = Mapper()

# 注册一个/hi路由
mapper.connect("/hi")

mapper.connect(None, "/error/{action}/{id}", controller="error")
mapper.connect("home", "/hi2", controller="main", action="index")
mapper.connect('/hi2/{action}')
mapper.connect('/hi3/{action}/{id}')

m4_res = mapper.routematch("/error/az/a")
print(m4_res)

# 查找/hi
m_result = mapper.routematch("/hi")
print(m_result)

# 查找/hi2
m2_result = mapper.routematch("/hi2/h2")
print(m2_result)

# 查找/hi3
m3_result = mapper.routematch("/hi3/boy/23")
print(m3_result)


 

执行结果如下:

({
   'action': 'az', 'id': 'a', 'controller': 'error'}, <routes.route.Route object at 0x0000020481DF5D90>)
({
   }, <routes.route.Route object at 0x0000020481DF5D00>)
({
   'action': 'h2'}, <routes.route.Route object at 0x0000020481DF5B50>)
({
   'action': 'boy', 'id': '23'}, <routes.route.Route object at 0x0000020481DF57C0>

当映射规则很多的时候,需要使用很多次 map.connect,这时可以使用 map.resource 方法
map.resource内部定义了默认的匹配条件
第一个参数message为 member_name(资源名),第二个参数messages为collection_name(资源集合名),一般定义资源集合名为资源名的复数
collection_name作为访问的路径名,且当没有传入参数controller时,controller=collection_name

from routes.mapper import Mapper

# 实例化一个Mapper对象
mapper = Mapper(always_scan=True)
mapper.resource("message", "messages", controller="testuse")
# 等同于以下匹配条件:

mapper.connect('/messages', controller="testuse", action='index', conditions={
   'method': ['GET']})

mapper.connect('/messages', controller="testuse", action='create', conditions={
   'method': ['POST']})

mapper.connect('/messages/{id:[0-9]+}', controller="testuse", action='show', conditions={
   'method': ['GET']})

mapper.connect('/messages/{id}', controller="testuse", action='update', conditions={
   'method': ['PUT']},
               requirements=dict(id=r"[a-z]+"))
mapper.connect('/messages/{id:[XYZ]}', controller="testuse", action='delete', conditions={
   'method': ['DELETE']})



 

转载:https://blog.csdn.net/liulanba/article/details/128975802
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场