2016-02-19 4 views
0

Я пытался поэкспериментировать с функцией loadhook в web.py, однако я не совсем в состоянии заставить ее работать. Вот мой код:loadhook функция в web.py не работает

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, и не выполняется базовый шаблон с тестом имени.

Я попытался запустить тот же код только с помощью 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 Дон» t возвращает данные в браузер, поэтому вызов render здесь не делает то, что вы хотите.

Пара других вопросов: вам необходимо позвонить app.add_processor(web.loadhook(my_hook)) до звонка app.run(), потому что последний устанавливает ваш цикл опроса & никогда не возвращается.

Что касается вашего заключительного вопроса: для захвата ключей и т. Д. Вам нужен ваш javascript, чтобы отправить что-то на сервер .... Каждый раз, когда есть нажатие клавиши, выполните вызов ajax на сервер, чтобы зарегистрировать действие.

Python мощный, но все еще не умеющий читать мысли.

 Смежные вопросы

  • Нет связанных вопросов^_^