python類庫26[web2py的URL映射]

來源:互聯網
上載者:User

 

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。

 

完!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.