【问题标题】:loadhook function in web.py not workingweb.py 中的 loadhook 函数不起作用
【发布时间】:2016-02-19 06:58:23
【问题描述】:

我正在尝试使用 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 模板非常简单,它回显了“名称”参数。

我从documentation 了解到的是,在每次请求之前都会调用 loadhook 函数。但这似乎不起作用。我已经尝试转到主页、另一个页面等。我在我的 CMD 上也没有看到打印语句,也没有执行名为 test 的基本模板。

我也尝试仅使用 add_processor 运行相同的代码,但没有运气。

谁能帮我弄清楚如何在页面上发生请求之前运行函数?

另外,我假设请求仅包含浏览器级别的请求。有什么方法可以通过 web.py 捕获更多内容? (例如在按键、鼠标点击等时调用函数)

非常感谢任何帮助!

【问题讨论】:

    标签: python web.py webhooks


    【解决方案1】:

    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 不向浏览器返回数据,因此调用 @987654325 @ 这里没有做你想做的事。

    其他几个问题:您需要在调用app.run() 之前调用app.add_processor(web.loadhook(my_hook)),因为后者会设置您的轮询循环并且永远不会返回。

    至于你的最后一个问题:要捕获按键等,你需要你的 javascript 向服务器发送一些东西......每次有按键时,对服务器进行 ajax 调用以记录操作。

    Python 很强大,但仍然无法读心。

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2011-09-11
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多