как aiohttp обрабатывает функцию onclick - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок ie для aiohttp, и у меня есть вопрос ниже,

Во-первых, у меня есть кнопка на странице, как показано ниже,

<body>

<button class="button" name="click_me" onclick="click_me">Click Me</button>

</body>

и в python код, я определяю функцию следующим образом:

async def click_me(request):
    logger.info(f'test on click_me')


async def handler(request):
    ... ... default code here ... ... 

Однако, когда я открываю браузер и нажимаю кнопку "click_me", на странице отладки отображается ошибка,

Uncaught ReferenceError: click_me is not defined at HTMLButtonElement.onclick

Как определить функцию в скрипте python для перехвата события click_me?

1 Ответ

1 голос
/ 15 апреля 2020

Нет, атрибут onclick относится к функции Javascript, которая должна быть загружена на вашу страницу. Если вы хотите вызвать функцию Python из этого события щелчка, вы должны выполнить HTTP-запрос (или любой другой, есть много других способов), например, с AJAX или fetch , на URL вашего сервера-корреспондента. например,

<body>
  <button onclick="doFoo"></button>
  <script>
    async function doFoo() {
      const response = await fetch('http://YOURSERVER/foo')
      // do whatever you want with your response
    }
  </script>
</body>

Будет вызывать функцию Python foo, определенную здесь

from aiohttp import web

async def foo(request):
    logger.info("button clicked")
    return web.Response()

app = web.Application()
app.add_routes([web.get('/foo', foo)])

if __name__ == '__main__':
    web.run_app(app)
...