#python #request #fastapi #httpcontext #starlette
Вопрос:
Я использую fastapi для создания веб-сайта и хочу получить request.body()
доступ для входа в систему. Я импортирую starlette-context==0.3.3
, чтобы получить глобальный контекст из запроса.
Поскольку плагин по умолчанию может получать переменную только из request.header
, мне нужно написать плагин, чтобы получить request.body()
Я мог бы легко получить какую-нибудь переменную , например request.url
, но я, когда я пишу плагин, чтобы получить тело моего запроса, у меня возникла проблема «RuntimeWarning: сопрограмма» Request.body «никогда не ожидалась», и мой маршрут fastapi не мог получить ни одного запроса.
Мой код плагина таков :
from typing import Any, Optional, Union
from starlette.requests import HTTPConnection, Request
from starlette_context.plugins import Plugin
class BodyPlugin(Plugin):
key = "body"
async def process_request(
self, request: Union[Request, HTTPConnection]
) -> Optional[Any]:
body = await request.body()
return body
И мое промежуточное программное обеспечение находится ниже:
middleware = [
Middleware(
ContextMiddleware,
plugins=(
BodyPlugin()
)
)
]