我正在尝试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
。
我怀疑应用程序数据没有正确传递给嵌套应用程序,但不确定。