学习WSGI框架pecan(五)使用_lookup实现路由处理

截止到上篇文章 学习WSGI框架pecan(四)注册路由方法二
我们已经有了两种方法去注册一个路由,今天我们第三种方法。OpenStack Neutron组件就是用这种方法实现的。

我们这次仍然只更改root.py,其他文件不动

添加新的控制器ITController

这个控制器我们用来处理,所有IT类型的书籍,也就是通过/book/it为前缀访问的

class ITController(object):

    @happy_expose
    def _default(self, *remainder):
        return "All the books here are about IT."

使用_lookup转发路由

我们给BookController增加方法_lookup

@happy_expose
    def _lookup(self, *remainder):
        if remainder[0] == "it":
            return ITController(), remainder[1:]

remainder这是一个数组,是去掉book以后的,我们判断紧接着是it的话我们就处理,不是的话就不管他。这个方法有效的返回是第一个是一个控制器,第二个是一个剩余路由的数组。其他返回无效!

效果查看

访问http://127.0.0.1:500/book/it
在这里插入图片描述
我们访问http://127.0.0.1:500/book/it/network 等以/book/it开头的都是这个返回。

我们访问以下httphttp://127.0.0.1:500/book/food
在这里插入图片描述
我们看到,返回了BookController的_default的处理结果。那么_default和_lookup的处理顺序是啥呢?下面介绍

结果说明

我们访问/book/it和/book/food Pecan是如何处理的呢?

第一步

我们知道这两个路由以book开头,会交给BookController去处理

第二步

BookController开始处理,查找有没有可用_default方法,加入notfound_handlers,发现有,我们的notfound_handlers=[BookController()._default]

第三步

查找有没有可用的_lookup方法,加入notfound_handlers,发现有,我们的notfound_handlers=[BookController()._default, [BookController()._lookup]

第四步

查找BookController同名的属性处理,发现没有,抛出PecanNotFound

第五步

接收到PecanNotFound查看一下notfound_handlers里有没有对象,发现有。接着处理

第六步

前面也提到过,会从notfound_handlers队尾获取一个处理方法,也就是BookController()._lookup(后入先出)。
处理/book/it,也就是BookController()._lookup(“it”)
处理/book/food,也就是BookController()._lookup(“food”)
当是it时,发现_lookup返回了一个两个元素的数组,校验,符合返回要求,把返回的第一个元素作为Controller继续处理。再从第一步开始走。不再赘述。
当food时,发现_lookup没有返回,不符合返回要求,交给notfound_handlers继续处理。注意:只有_lookup返回不合法时,会继续交给notfound_handlers,如果是_default返回不合法将直接报404!

第七步

当是food时,_lookup没处理成功,发现notfound_handlers,还能pop出处理对象,就接着交给_default处理,所以页面显示“This is Book default”。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值