zoukankan      html  css  js  c++  java
  • python类库26[web2py的URL映射]

    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的信息返回用户的浏览器。

    web2py自动地透明地用session和cookie来记录访问者。对每个新的访问者,它创建一个session然后赋予一个唯一的session_id。session是变量的容器存储在server端。session的id将通过cookie回传给访问者的浏览器。当访问者在同一个应用中请求另一个页面时,浏览器将cookie返回,在server端web2py将检查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。

    完!

  • 相关阅读:
    PHP之get请求用php脚本实现
    PHP之download
    PHP之缩略图
    PHP之upload
    文本域<textarea>将 替换成换行
    JSON中获取变量key的值
    emap表格checkbox属性默认勾选
    读取ORACLE数据库中BOLB形式数据在前端预览
    oracle常用语法
    批量删除本地仓库未下载完成的jar文件
  • 原文地址:https://www.cnblogs.com/itech/p/2018796.html
Copyright © 2011-2022 走看看