Я не получаю данные на стороне сервера request.post () - PullRequest
1 голос
/ 04 октября 2019

Я новичок в Aiohttp, и вот код клиента для заполнения данных. Ниже серверный код для получения данных. Но в конце сервера я получаю KeyError. Также см. Print (len (request.post ()) @ server равно 0. Но этот код сервера работает с тестированием Postman. И этот код клиента хорошо работает с запросом "/ httpbin / post /". Что не так с этим кодом. Помогаеточень ценится.

НА СТОРОНЕ КЛИЕНТА

BASE_URL = "http://127.0.0.1:9001/"
headers = {
            "Accept": "application/json",
            "Content-Type": "application/json",
        }
data = {'username': 'achama', 'password': 'password'}

register_endpoint = "register"


jar = aiohttp.CookieJar(unsafe=True)

async def main():
    async with aiohttp.ClientSession(json_serialize=ujson.dumps, cookie_jar=jar) as session:
        async with session.post(url=BASE_URL+register_endpoint, json=data, headers=headers) as resp:
            resp_data = await resp.json(content_type=None)
            print(resp_data)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
# Zero-sleep to allow underlying connections to close
loop.run_until_complete(asyncio.sleep(0))
loop.close()

НА СЕРВЕРЕ

регистр асинхронного определения (self, request): print (len (await request.post)()))

posted_data = await request.post()
user_id = await db.get_user_id(self.mongo.loginhub, 
posted_data['username'])
if user_id is None:
    hashed_password = generate_password_hash(posted_data['password'])
        await self.mongo.loginhub.insert_one(
            {'username': posted_data['username'],
             'current_password': hashed_password, 
             'last_password': ""})
        unique_id = await db.get_user_id(self.mongo.loginhub, posted_data['username'])
        await self.mongo.users.insert_one(
            {'unique_id': unique_id, 'username': posted_data['username'], 
            "joined_date": datetime.utcnow(), "active": False})
        return json_response({"message": f"Your account created with {posted_data['username']} Please login to use."})
    else:
        return json_response({"Error": f"Username {posted_data['username']} already exists. Please choose another one."})

ОШИБКА СТОРОНЫ СЕРВЕРА

Файл "/home/bijuknarayan/workspace/aio/marryapp/backend/auth.py", строка 44, в регистреuser_id = await db.get_user_id (self.mongo.loginhub, posts_data ['username']) Файл "multidict / _multidict.pyx", строка 62, в базе данных multidict._multidict._Base. getitem Файл "multidict /_multidict.pyx ", строка 57, в файле multidict._multidict._Base._getone" multidict / _multidict.pyx ", строка 52, в файле multidict._multidict._Base._getone KeyError: 'username'

1 Ответ

0 голосов
/ 04 октября 2019

Замените await request.post() на await request.json() на стороне сервера, если вы хотите обрабатывать данные JSON.

...