FastAPI:我也可以对 POST 中的参数使用 Depends() 吗?
FastAPI: can I use Depends() for parameters in a POST, too?
概览
我创建了一个基于 class 的依赖,类似于惊人的 FastAPI tutorial.
问题
有效,除了依赖项中的参数(Depends()
部分)作为查询参数传递,这意味着它们是[=47的一部分=].我使用基于 class 的依赖项来简化对 Azure Datalake 的访问,因此 Depends 中的参数至少在某种程度上是秘密的。所以我更希望他们在 POST 部分。
问题
有没有办法使用 Depends()
,但通过 POST 有效负载而不是 URL 路径传递 class 初始化参数?
详情
举个例子:
依赖class(只是初始化,捕获依赖参数):
class DatalakeConnection(object):
"""Using FastAPI's `Depends` Dependency Injection, this class can have all
elements needed to connect to a data lake."""
def __init__(
self,
dir: str = my_typical_folder,
container: str = storage_container.value,
):
service_client = DataLakeServiceClient(
account_url=storage_uri,
credential=storage_credential,
)
self.file_system_client = service_client.get_file_system_client(
file_system=container
)
self.directory_client = self.file_system_client.get_directory_client(dir)
self.file_client = None
FastAPI路径函数:
@app.post("/datalake") # I have no response model yet, but will add one
def predictions_from_datalake(
query: schemas.Query, conn: DatalakeConnection = Depends()
):
core_df = conn.read_excel(query.file_of_interest) # I create a DataFrame from reading Excel files
总结
正如我所说,这有效,但是初始化 class 所需的 dir
和 container
被强制进入 URL 查询参数,但我想要它们是 POST:
请求正文中的键值对
您可以像路径操作体参数一样声明它们。更多信息在这里 Singular values in body:
class DatalakeConnection(object):
"""Using FastAPI's `Depends` Dependency Injection, this class can have all
elements needed to connect to a data lake."""
def __init__(
self,
dir: str = Body("dir_default"),
container: str = Body("container_default"),
):
pass
请求正文示例:
{
"dir": "string",
"container": "string"
}
概览
我创建了一个基于 class 的依赖,类似于惊人的 FastAPI tutorial.
问题
有效,除了依赖项中的参数(Depends()
部分)作为查询参数传递,这意味着它们是[=47的一部分=].我使用基于 class 的依赖项来简化对 Azure Datalake 的访问,因此 Depends 中的参数至少在某种程度上是秘密的。所以我更希望他们在 POST 部分。
问题
有没有办法使用 Depends()
,但通过 POST 有效负载而不是 URL 路径传递 class 初始化参数?
详情
举个例子:
依赖class(只是初始化,捕获依赖参数):
class DatalakeConnection(object):
"""Using FastAPI's `Depends` Dependency Injection, this class can have all
elements needed to connect to a data lake."""
def __init__(
self,
dir: str = my_typical_folder,
container: str = storage_container.value,
):
service_client = DataLakeServiceClient(
account_url=storage_uri,
credential=storage_credential,
)
self.file_system_client = service_client.get_file_system_client(
file_system=container
)
self.directory_client = self.file_system_client.get_directory_client(dir)
self.file_client = None
FastAPI路径函数:
@app.post("/datalake") # I have no response model yet, but will add one
def predictions_from_datalake(
query: schemas.Query, conn: DatalakeConnection = Depends()
):
core_df = conn.read_excel(query.file_of_interest) # I create a DataFrame from reading Excel files
总结
正如我所说,这有效,但是初始化 class 所需的 dir
和 container
被强制进入 URL 查询参数,但我想要它们是 POST:
您可以像路径操作体参数一样声明它们。更多信息在这里 Singular values in body:
class DatalakeConnection(object):
"""Using FastAPI's `Depends` Dependency Injection, this class can have all
elements needed to connect to a data lake."""
def __init__(
self,
dir: str = Body("dir_default"),
container: str = Body("container_default"),
):
pass
请求正文示例:
{
"dir": "string",
"container": "string"
}