Core Service处理HTTP Request的函数映射

48 篇文章 11 订阅
对于Core Service的WSGI Application而言,一个HTTP Request过来以后,基本的处理流程是在父类class Router中完成的。class Router处理到最后,是从它的成员变量map中查找到对应的处理函数并执行它。mapper本质上是class Router的成员变量。
app=mapper[‘controller’]
class Router的成员变量map是在子类class APIRouter中完成构建。class APIRouter一共两个函数,一个是factory,另外一个就是__init__函数。
APIRouter的__init__函数,完成三件事情:
1 初始化map这个成员变量。
2 加载了ML2 Plugin。
3 实例化了Core Service的Extensoin Manager。
在此只介绍map的初始化。APIRouter的__init__函数与map初始化相关的代码如下:
class APIRouter(base_wsgi.Router):
    def __init__(self, **local_config):
        #创建mapper这个对象
        mapper = routes_mapper.Mapper()
        #给mapper这个对象赋值
        mapper.connect('index', '/', controller=Index(RESOURCES))
        #其他初始化
        for resource in RESOURCES:
            _map_resource(RESOURCES[resource], resource,
                          attributes.RESOURCE_ATTRIBUTE_MAP.get(
                              RESOURCES[resource], dict()))
            resource_registry.register_resource_by_name(resource)
        #调用父类的__init__函数,将mapper赋值给成员变量map
        super(APIRouter, self).__init__(mapper)
        
def __init__(self, mapper):
    #将mapper赋值给成员变量map
    self.map = mapper
以上代码,完成了class APIRouter成员变量map的创建和赋值。map的数据结构是routes_mapper.Mapper。关于它的赋值,Neutron写了一段非常复杂的代码,上述代码中,只举了一个例子:
mapper.connect('index', '/', controller=Index(RESOURCES))
这句话非常重要,它虽然只是routes_mapper.Mapper这个class的一个基本用法,却是了解基本原理的一把金钥匙。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值