Python 使用FastAPI将json数据传递到服务器的最简单方式

Python 使用FastAPI将json数据传递到服务器的最简单方式,python,rest,file-transfer,fastapi,Python,Rest,File Transfer,Fastapi,我正试图通过一些方法将一些json内容从客户端传递到服务器 使用FastAPI构建的简单RESTAPI(使用uvicorn)。 如果我将文件内容包装成pydantic.BaseModel这样 app = FastAPI() class ConfigContents(BaseModel): str_contents: str @app.post("/writeFile/{fn}") async def write_file(fn: str, contents: Co

我正试图通过一些方法将一些json内容从客户端传递到服务器 使用FastAPI构建的简单RESTAPI(使用uvicorn)。 如果我将文件内容包装成
pydantic.BaseModel
这样

app = FastAPI()

class ConfigContents(BaseModel):
    str_contents: str

@app.post("/writeFile/{fn}")
async def write_file(fn: str, contents: ConfigContents):
    filepath = "/some_server_dir/" + fn
    with open(filepath, "w") as f:
        f.write(contents.str_contents)
    return contents
我基本上得到了我想要的,即在客户端(使用请求库),我可以执行

response = requests.post("http://127.0.0.1:8000/writeFile/my_file.json", 
             data=json.dumps({"str_contents": contents}))
并最终将文件内容分配给
response
,并写入“服务器”上的文件。 我的问题是:有没有更简单的方法来达到同样的效果,例如只是传球 将json内容作为字符串发送到服务器,而无需将其包装到模型中?

来源:

如果不想使用Pydantic模型,也可以使用实体参数。参见正文文档-多参数:正文中的奇异值

说明可以使用
正文(…)
默认值声明任何参数,使其成为要从resquest正文检索的值

这意味着您只需删除pydantic模型并将
write_文件
函数声明更改为:

async def write_文件(fn:str,contents=Body(…):
...

然而,在我看来,这是一个(非常)坏的主意。FastApi使用
pydantic
模型验证提供的数据并生成方便的API文档。
我建议您改进和开发用于获得更好的自动验证和文档的
pydantic
模型。

将其包装到模型中是Fastapi的一项功能。它可以确保输入中传递的数据是正确的(从语法上讲)。您当然可以删除它并访问内容,但您必须自己处理它。请特别注意车身(…)参数您的建议重新建模听起来非常合理,谢谢!