2016-02-19 34 views
0

我試圖在web.py中嘗試使用loadhook函數,但是我不能完成它的工作。這裏是我的代碼:web.py中的loadhook函數不起作用

import web 

render = web.template.render('templates/') 

urls = (
    '/(.*)', 'index' 
) 

class index: 
    def GET(self, name): 
     return render.base(name) 


def test(): 
    print "damn" 
    render.base("test") 


if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run() 
    app.add_processor(web.loadhook(test)) 

base.html模板非常簡單,可以回顯「name」參數。

我從documentation瞭解到loadhook函數將在每個請求之前調用。但它似乎並不奏效。我曾嘗試去主頁,另一個頁面等。我也看不到我的CMD上的打印語句,也沒有執行名稱測試的基本模板。

我試着用add_processor運行相同的代碼,但沒有運氣。

任何人都可以幫助我弄清楚如何在頁面上發生請求之前運行一個函數嗎?

此外,我假設請求只包含瀏覽器級別的請求。有什麼辦法通過web.py捕獲更多? (如在按鍵上調用某個功能,點擊鼠標等)

任何幫助都非常感謝!

回答

0

loadhooks在處理過程中被初始調用並用於設置配置或攔截。例如,我實現類似於以下黑名單:

def my_hook(): 
    # If requester's IP is in my blacklist, redirect his browser. 
    if blacklist.in_blacklist(web.ctx.ip) and web.ctx.path != '/blacklist': 
     raise web.seeother('/blacklist') 

.... 
app.add_processor(web.loadhook(my_hook)) 

在你的榜樣,你test勾調用render(我猜你想渲染測試頁?)問題是loadhooks不要」將數據返回給瀏覽器,因此在這裏調用render不會做你想要的。

其他問題:在撥打app.run()之前您需要先撥app.add_processor(web.loadhook(my_hook)),因爲後者設置您的輪詢循環&永不返回。

至於你的最後一個問題:捕獲按鍵等,你需要你的JavaScript發送一些東西到服務器....每當有一個按鍵,做一個Ajax調用服務器記錄的行動。

Python的強大,但仍然無法讀懂頭腦。