aiohttp嵌套应用程序并传递应用程序数据

时间:2018-04-19 23:48:40

标签: python-3.6 aiohttp

我正在尝试aiohttp(测试Flask,只是为了学习它),并且遇到了通过应用程序传递数据的问题。示例说我可以在app中设置键值以传递静态信息(例如,数据库连接)。但是,不知怎的,这些信息正在丢失,我怀疑它是在嵌套应用程序中,但不确定。

app.py

import asyncio
from aiohttp import web
import logging

from data import data_handler
from data import setup_web_app as data_setup_web_app

logging.basicConfig()
log = logging.getLogger('data')
log.setLevel(logging.DEBUG)

async def my_web_app():
    loop = asyncio.get_event_loop()
    app = web.Application(loop=loop)

    app['test'] = 'here'

    data_setup_web_app(web, app)

    return app

data.py

from aiohttp import web
import logging
logging.basicConfig()
log = logging.getLogger('data')
log.setLevel(logging.DEBUG)

def setup_web_app(web, app):
    data = web.Application()
    data.add_routes([web.get('/{name}', data_handler, name='data')])
    app.add_subapp('/data/', data)

async def data_handler(request):
    name = request.match_info['name']

    log.debug('test data is {}'.format(request.app['test']))

    return web.json_response({'handler': name})

我正在使用gunicorn来运行它:gunicorn app:my_web_app --bind localhost:8080 --worker-class aiohttp.worker.GunicornWebWorker --workers=2

但是当我在浏览器中转到http://127.0.0.1:8080/data/asdf时,我在KeyError: 'test'调试打印语句中得到data.py

我怀疑应用程序数据没有正确传递给嵌套应用程序,但不确定。

1 个答案:

答案 0 :(得分:0)

现在主应用程序的密钥在子应用程序中不可见,反之亦然。

请阅读issue了解详情。

我想为此支持一种链式地图,但该功能尚未实现。