AIOHTTP: TypeError: index () принимает 0 позиционных аргументов, но 1 был задан - PullRequest
0 голосов
/ 13 декабря 2018
from aiohttp import web
import aiohttp
from settings import config
import asyncio
import psycopg2 as p
import json
import aiopg

import aiohttp
import asyncio

async def fetch(client):
    async with client.get('https://jsonplaceholder.typicode.com/todos/1') as resp:
        assert resp.status == 200
        return await resp.json()

async def index():
    async with aiohttp.ClientSession() as client:
        html = await fetch(client)
        return web.Response(html)

loop = asyncio.get_event_loop()
loop.run_until_complete(index())

это мои views.py

from aiohttp import web
from routes import setup_routes
from settings import config

app = web.Application()
setup_routes(app)

web.run_app(app,port=9090)

main.py

from views import index

def setup_routes(app):
    app.router.add_get('/', index)

и вот мои маршруты.py

но когда япопытался запустить URL локального хоста: 9090 я просто получаю внутреннюю ошибку сервера 500, говорящую

TypeError: index() takes 0 positional arguments but 1 was given

, но я могу напечатать json в терминале, но не могу запустить то же самое, что веб-ответ в браузере, я не знаючто не так в этом случае

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Ваша index сопрограмма является обработчиком , поэтому она должна принять один позиционный аргумент, который получит экземпляр Request.Например:

async def index(request):
    async with aiohttp.ClientSession() as client:
        html = await fetch(client)
        return web.Response(html)

loop.run_until_complete(index()) на верхнем уровне views.py не требуется и не будет работать, если index() определен правильно.

0 голосов
/ 13 декабря 2018

Ваша асинхронная функция index() должна принимать аргумент request для совместимости с веб-обработчиком.

...