文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>python26web[web2py的URL映射]

python26web[web2py的URL映射]

时间:2011-04-18  来源:iTech

 

web2py的URL映射 

1) http://127.0.0.1:8000/a/c/f.html的映射

web2py的URL映射规则将http://127.0.0.1:8000/a/c/f.html映射到Application(a)的Controller(c)的function(f)。如果function(f)不存在,则映射到Controller(c)的function(index)函数。如果Controller(c)不存在,web2py默认映射到Controller(default),如果application(a)不存在的话,web2py默认映射到application(init),如果application(init)不存在的话,web2py将映射到application(welcome)。

 

 


默认地,任何新的request将创建新的session,然后session cookie将session的信息返回用户的浏览器。

 

.html扩展是默认的页面扩展,页面的扩展决定了使用何种view来渲染Controller的function。此方法允许页面被渲染为多种格式(html,xml,json,rss,etc)。

 

2)http://127.0.0.1:8000/a/static/filename的映射

URL映射的一个特例:http://127.0.0.1:8000/a/static/filename将此request映射为application(a)下的subfolder(static)下的file(filename)。当静态文件被下载的时候,web2py不创建session,也不返回cookie,也不执行models。web2py总是将静态文件流化为1MB的块,当客户端对文件发送RANGE request时,PARTIAL CONTENT将被返回。

 

web2py也支持IF_MODIFIED_SINCE协议,如果文件已经存储在浏览器的缓冲且从上个版本后没有改动,文件将不被返回。

 

3)http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2的映射
web2py将http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2映射为application(a)的Controller(c)的function(f),且存储URL中的参数到request变量中,如下:
request.args = ['x', 'y', 'z']
request.vars = {'p':1, 'q':2}
request.application = 'a'
request.controller = 'c'
request.function = 'f'

在以上的例子中,request.args[i] 和 request.args(i)用来获得request.args的第i个元素。

 

request.url 存储了当前request的Full URL(不包含get变量)。

 

如果HTTP request是GET,则request.env.request_method设置为GET,如果为POST,则request.env.request_method设置为POST。


URL查询变量被存储在request.vars存储字典中; 如果是GET request,则变量同时被存储在request.get_vars,如果是POST,则存储在 request.post_vars 。

web2py存储WSGI和web2py环境变量在request.env中,例如request.env.path_info = 'a/c/f',存储HTTP 头在环境变量中,例如request.env.http_host = '127.0.0.1:8000' 。

 

4) 总结

web2py对静态文件的请求,只是简单地读取和返回请求的文件的流。

 

对于非静态文件,过程如下:
1))解析cookies;
2))创建环境来执行函数;
3))初始化request,response,cache;
4))打开存在的session或者新创建session;
5))执行属于请求应用的models;
6))执行请求控制器的action函数;
7))如果函数返回dictionary,则执行对应的view;
8))如果成功,提交所有打开的事务;
9))保持session;
10))返回一个HTTP response;

 

注意:controller和view在相同环境的不同的copy下执行,但是controller对view不可见,但是view可以访问models,可以访问controller action函数返回的变量。

 

如果一个异常(不是HTTP异常)发生,web2py做以下动作:
1))存储错误文件的traceback且分配一个ticket number;
2))roll back所有打开的事务;
3))返回一个错误页面包含了ticket number;

如果是HTTP异常,则被认为是内部的行为,所有打开的数据库事务被commit。

 

完!

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载