Добавление маршрута в обработчик aiohttp WSGI - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь запустить приложение WSGI, как описано здесь https://aiohttp-wsgi.readthedocs.io/en/stable/wsgi.html

Следующий код работает:

app = web.Application()
app.router.add_route("*", "/{path_info:.*}", wsgi_handler)

Но я хочу добавить путь как /hello, поэтому я попытался выполнить несколько вещей, ни одна из которых не сработала. Например:

Подход 1:

app.router.add_route("*", "/hello", wsgi_handler)

дает мне 500 Internal Server Error в браузере и на консоли:

Error handling request
Traceback (most recent call last):
  File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/aiohttp/web_protocol.py", line 418, in start
    resp = await task
  File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/aiohttp/web_app.py", line 458, in _handle
    resp = await handler(request)
  File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/aiohttp/web_urldispatcher.py", line 158, in handler_wrapper
    return await result
  File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/aiohttp_wsgi/wsgi.py", line 261, in handle_request
    environ = self._get_environ(request, body, content_length)
  File "/media/raghav/workspace/anaconda3/lib/python3.7/site-packages/aiohttp_wsgi/wsgi.py", line 182, in _get_environ
    path_info = request.match_info["path_info"]
KeyError: 'path_info'

Подход 2:

app.router.add_route("*", "/{path_info: hello}", wsgi_handler)

выдает ошибку 404: Not Found в браузере и ничего не говорит на терминале.

Как добавить маршрут?

1 Ответ

0 голосов
/ 06 апреля 2020

Попробуйте это:

app.router.add_route("*", "/{path_info:hello.*}", wsgi_handler)

Полный пример:

from aiohttp import web
from aiohttp_wsgi import WSGIHandler


def noop_application(environ, start_response):
    start_response("200 OK", [
        ("Content-Type", "text/plain"),
    ])
    return []


if __name__ == '__main__':
    wsgi_handler = WSGIHandler(noop_application)
    app = web.Application()
    app.router.add_route("*", "/{path_info:hello.*}", wsgi_handler)
    web.run_app(app)
...