3

Flask アプリケーションを aiohttp でラップする必要があります。起動すると、エラーが発生します:

This webpage has a redirect loop

ERR_TOO_MANY_REDIRECTS
ReloadHide details
The webpage at http://localhost:5000/ has resulted in too many redirects. Clearing your cookies for this site or allowing third-party cookies may fix the problem. If not, it is possibly a server configuration issue and not a problem with your computer.
Learn more about this problem.

コード:

import asyncio
from flask import Flask
from aiohttp import web
from aiohttp_wsgi import WSGIHandler

app = Flask(__name__)

@app.route('/')
def login():
    return 'Hello World'

@asyncio.coroutine
def init(loop):
    wsgi_flask_app = WSGIHandler(app)
    aio_app = web.Application(loop=loop)
    aio_app.router.add_route('*', '/{path_info:.*}', wsgi_flask_app)

    srv = yield from loop.create_server(
        aio_app.make_handler(), '127.0.0.1', 5000)
    return srv

if __name__ == '__main__':
    io_loop = asyncio.get_event_loop()
    io_loop.run_until_complete(init(io_loop))

    try:
        io_loop.run_forever()
    except KeyboardInterrupt:
        print('Interrupted')

この例のようにルートを変更すると

aio_app.router.add_route('*', '{path_info:.*}', wsgi_flask_app)

ValueError が発生します: パスは / で開始する必要があります。私は何を間違っていますか?

4

1 に答える 1

1

aiohttp.router の「add_route」メソッドは、次の構成で回避できます。

wsgi_route = DynamicRoute('*', wsgi_flask_app, 'wsgi_flask_app',
                          re.compile('^(?P<path_info>.*)$'), '{path_info}')
app.router.register_route(wsgi_route)

しかし、それはかなり良い解決策ではありません。これは、aiohttp の下位互換性のない変更のように見えます。より良い解決策は、別の aiohttp バージョンを使用することです。

アップデート:

aiohttp-wsgi 0.2.5 バージョン以降、「/」で始まるルートを追加できます。

于 2015-09-01T17:07:59.210 に答える