Как получить параметры строки запроса из URL в Aiohttp? - PullRequest
0 голосов
/ 26 мая 2018

Я пытался получить параметры строки запроса из URL с помощью aiohttp, но этот код не работает:

async def call_answer(request):
    print("request", request)
    params = request.rel_url.query
    print("parameters +++++", params["call_id"])
    conn = psycopg2.connect(connect_str)
    cursor = conn.cursor()
    sql = """
          update calls
          set status = %s
          where id = %s;
          """ % (params["status"], params["call_id"])
    cursor.execute(sql)
    conn.commit()

    return web.Response(
        content_type='application/json',
        text=json.dumps({
            'status': 'success'
        }))



if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='WebRTC audio / video / data-channels demo')
    parser.add_argument('--port', type=int, default=8080,
                        help='Port for HTTP server (default: 8080)')
    parser.add_argument('--verbose', '-v', action='count')
    args = parser.parse_args()

    if args.verbose:
        logging.basicConfig(level=logging.DEBUG)

    app = web.Application()
    app.router.add_get('/{call_id}&{status}', call_answer)

Я искал в Интернете, и везде было написано, что вы должны использовать request.rel_url.запрос, чтобы получить все параметры из строки запроса, но я получаю ошибку при выполнении кода !!!!!

1 Ответ

0 голосов
/ 26 мая 2018

Вы не должны добавлять строку запроса в спецификацию маршрута, потому что aiohttp выбрасывает строку запроса при сопоставлении маршрута.request.rel_url.query работает хорошо, вот пример:

from aiohttp import web


async def call_answer(request):
    params = request.rel_url.query
    return web.Response(text='\n'.join([
        'call_id = ' + params['call_id'],
        'status = ' + params['status'],
    ]))


app = web.Application()
app.router.add_get('/', call_answer)
web.run_app(app)

Тестирование:

$ curl 'localhost:8080/?call_id=100&status=200'
call_id = 100
status = 200
...