AIOHTTP:TypeError: index() принимает 0 позиционных аргументов, но 1 был задан

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)

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

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

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

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

2 ответа

Решение

Ваш 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() определяется правильно.

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

Другие вопросы по тегам