在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Python中的Routes模块是什么

175次阅读
没有评论

共计 4204 个字符,预计需要花费 11 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 Python 中的 Routes ??槭鞘裁?,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Routes  是一个 python 重新实现的 Rails routes system,用来将 urls 映射到应用具体的 action 上,相反的,还生成 url。由于 Routes 是 Rails routes system 的 python 实现,并且网上关于 Routes 的文档很少,故从 rails 的 routes system 入手,就能很好的理解 Routes 库了。

首先看一个简单的例子,就明白 routes 的作用,

例如浏览器接收到下面的 HTTP 请求,GET /instances/1 Rails 的路由请求则负责将此请求解析后 dispatch 来代码中的具体某个函数,完成调用,例如返回虚拟机的信息。

第一部分:讲解 wsgi 的调用入口(paste)

python 中的 WSGI(Web Server Gateway Interface)是 Python 应用程序或框架与 Web 服务器之间的一种接口,定义了一套借口来实现服务器与应用端的通信规范。按照一套规范,应用端 想要通信,很简单,只需要实现一个接受两个参数的,含有__call__方法并返回一个可遍历的含有零个或者多个 string 结果的 python 对象。

服务端,对于每个 http 请求,调用一次应用端“注册”的那个协议规定应用必须实现的对象,然后返回相应的响应消息。WSGI Server 唯一的任务就是接收来自 client 的请求,然后将请求传给 application,最后将 application 的 response 传递给 client。中间存在的一些东西,就需要中间件来处理。

 

Paste Deployment 是用于发现和配置 WSGI appliaction 和 server 的系统。对于 WSGI application,用户提供一个单独的函数(loadapp),用于从配置文件或者 python egg 中加载 WSGI application。因为 WSGI application 提供了唯一的单独的简单的访问入口,所以 application 不需要暴露 application 的内部的实现细节。

Paste.Deploy 主要是用来载入 WSGI 中的 Web App 使用,其核心函数是 loadapp()。

 

以下将以 openstack 的 nova 为例讲解 paste 如何载入启动 nova 服务(即发布 routes API 给上层提供调用)

1、nova –debug list 开始:

命令的主要目的就是发送了两个 url 请求:(第一个发送给 keystone 授权,授权通过发送给 nova 获取虚拟机列表)

url 中包括了 token 以及参数值

下图说明请求 url 成功,返回 200.

2、接下来详解,发送以下 url,如何映射到后台的 v2 版本的 nova API 以及又是如何进行权限认证配置。

http://192.168.1.120 :8774/v2/c865d5a3760348a4b8a92cf657a9176d/servers/detail
     

3、每一个 url 映射都是有 paste ??榻薪馕觯琾aste 模块具体解析??槿肟诰褪?*.ini 配置文件。以下展示了整个 openstack 中所有的 url 映射控制的 paste 入口配置文件。
 

 

find /etc/ | xargs grep paste –color=auto 查找到所有的 paste 的 ini 配置文件。
     

4、以 nova 的 api-paste.ini 配置文件讲解。

首先介绍 paste 配置文件中的几个概念:

一个配置文件后缀为 ini,内容被分为很多段(section),paste.depoly 只关心带有前缀的段,比如 [app:main] 或者[filter:errors],总的来说,一个 section 的标识就是[type:name], 不是这种类型的 section 将会被忽略。

一个 section 的内容是以键 = 值来标示的。# 是一个注释。在段的定义中,有以下几类:

[app:main]: 定义 WSGI 应用,main 表示只有一个应用,有多个应用的话 main 改为应用名字

[server:main]: 定义 WSGI 的一个 server。

[composite:xxx]:表示需要将一个请求调度定向(dispatched)到多个, 或者多种应用上。以下是一个简单的例子,例子中,使用了 composite,通过 urlmap 来实现载入多应用。

[fliter:]:定义“过滤器”,将应用进行进一步的封装。

[DEFAULT]:定义一些默认变量的值。

vim /etc/nova/api-paste.ini 

其中 openstack_compute_api_v2 的 use = call:nova.api.auth:pipeline_factory 表示通过访问的 url,来选择具体使用哪个应用。

根据 http://192.168.1.120:8774/v2/c865d5a3760348a4b8a92cf657a9176d/servers/detail,由匹配规则,接下来调用

/v2: openstack_compute_api_v2 应用。

这个 Application 对应了三个参数:noauth,keystone 和 keystone_nolimit。我们可以看到这里 Application 具体实现的方法是 pipeline_factory。我们可以看到在参数 noauth,keystone 和 keystone_nolimit 中,分别集成了多个应用,实际上每个参数最终实现的 Application 分别是最后一个,即 osapi_compute_app_v2,osapi_compute_app_v2 和 osapi_compute_app_v2,其前面的 Application 都扮演这最后一个 Application 的过滤器。我们以参数 keystone 为例,实现参数 keystone 的 Application 为 osapi_compute_app_v2,它前面的 faultwrap sizelimit authtoken keystonecontext 等应用都是它的过滤器,其实现过程也就是 faultwrap(sizelimit(authtoken(keystonecontext(osapi_compute_app_v2)))),具体的调用过程就是 osapi_compute_app_v2- keystonecontext- authtoken- sizelimit- faultwrap,前面方法的执行结果作为后面方法的输入参数,最后得到的运行结果作为参数 keystone 的值。可以说明,三个参数 noauth,keystone 和 keystone_nolimit 的值都是这样得到的。

详解:

后面三句分别对应配置文件中不同配置执行不通的过滤流程,最终三个都将返回 osapi_compute_app_v2 应用。

use = call:nova.api.auth:pipeline_factory 代码:

pipeline_factory 函数的目的就是读取解析配置文件(/etc/nova/nova.conf)中定义的认证策略:noauth、keystone、keystone_nolimit。

假若在配置文件 nova.conf 中,配置的是 auth_strategy=keystone,接下来匹配:

keystone_nolimit = faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v2

faultwrap sizelimit 过滤器不做进一步详解,有兴趣者请自行跟进代码查看。
 5、分析 authtoken  过滤器:
 
 
 
 

找到对应的代码:
 
 Python 中的 Routes 模块是什么
  由上述代码可知,授权对应过滤器 authtoken,具体操作在 AuthProtocol 类的__call__函数。授权的具体细节请自行分析以上函数,再次不做过多讲解。
  注:有 paste 的知识可知,每一个 factory,都会有一个__call__函数。调用该 factory 就会调用此函数。
 

6、接下来分析 keystonecontext 过滤器:

Python 中的 Routes ??槭鞘裁?> </p>
<p>对应代码:</p>
<p><img decoding=

keystonecontext 过滤器执行过程:

Python 中的 Routes 模块是什么

7、到此过滤器执行完了,接下来重点分析 osapi_compute_app_v2 应用:

keystone_nolimit = faultwrap sizelimit authtoken keystonecontext osapi_compute_app_v2

Python 中的 Routes 模块是什么

找到对应入口代码:

Python 中的 Routes ??槭鞘裁?> </p>
<p>上述 APIRouter 类就是 paste 加载 osapi_compute_app_v2 应用,然后发布路由规则处。</p>
<p>class APIRouter(nova.api.openstack.APIRouter):</p/>找到父类<br />
   nova.api.openstack.APIRouter:<br />
  <img title=
 
 
 

8、打印 router 信息:

 vim /usr/lib/python2.6/site-packages/nova/api/openstack/__init__.py
     

Python 中的 Routes ??槭鞘裁?> </p>
<p>重启 openstack-nova-api 服务</p>
<p/>service  openstack-nova-api restart<br />
      </p>
<p>tailf /var/log/nova/api.log<br />
      </p>
<p> <br />
  </p>
<p><img decoding=正文完

 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计4204字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 日韩在线视频线视频免费网站 | 久久免费特黄毛片 | 奇米影视第四色首页 | 精品亚洲成在人线av无码 | 欧美成人一区二免费视频软件 | 亚洲色偷偷色噜噜狠狠99 | 美女av一区二区三区 | 国产精品爱久久久久久久电影蜜臀 | 午夜三级a三级三点在线观看 | 亚洲精品高清国产一久久 | 国产精品久久久久久久9999 | 国产三级国产精品 | 亚洲色精品三区二区一区 | 国产资源在线播放 | 亚洲一区精品无码 | 日韩理论午夜无码 | 亚洲欧美日韩中文字幕在线 | 美女与男人对肌免费网站 | 亚洲在线观看网站 | 性高潮动态图 | 五月天香蕉| 爱爱精品视频 | 成人欧美精品一区二区不卡 | 一级毛片在线观看免费 | 国产深夜福利视频在线 | 国产av偷闻女邻居内裤被发现 | 国产精品揄拍一区二区久久 | 97超级碰碰人妻中文字幕 | 日本大乳高潮视频在线观看 | 最近的中文字幕在线看视频 | 久久福利青草精品免费 | 国产特级毛片aaaaaaa高清 | 亚洲欧美日韩精品永久在线 | 男人的天堂欧美精品色偷偷 | 中文字幕久久久 | 91在线精品免费观看 | 三级天堂 | 欧美牲交a欧美牲交aⅴ免费下载 | 在线播放亚洲美女视频网站 | 91香蕉国产线观看免 | 成年美女黄网站色大片免费软件看 |