我试图尝试使用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上看到打印声明,也没有执行名为test的基本模板。
我尝试使用add_processor运行相同的代码,但没有运气。
任何人都可以帮我弄清楚如何在页面上发出请求之前运行一个函数吗?
此外,我假设请求仅包含浏览器级别请求。有没有办法通过web.py捕获更多? (例如在按键上调用函数,鼠标单击等)。
非常感谢任何帮助!
答案 0 :(得分: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.add_processor(web.loadhook(my_hook))
之前致电app.run()
,因为后者会设置您的投票循环和永远不会回来。
关于你的最后一个问题:要捕捉按键等,你需要你的javascript向服务器发送内容......每次有按键时,都要对服务器进行ajax调用以记录动作。
Python功能强大,但仍然无法读懂思想。