from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel
import simplejson as json
class SubmitGeneral(BaseModel):
controllerIPaddress: str
readerIPaddress: str
ntpServer: str
@app.post("/submitGeneral")
async def submitGeneral(data: SubmitGeneral):
data = jsonable_encoder(data)
#data = json.loads(data.json()) # same as above line
print(f"data = {json.dumps(data)}")
# you have to access the properties with brackets, not by dot notation
query = f"update LocalPLC set ControllerIpAddress = '{data['controllerIPaddress']}', ReaderIPAddress = '{data['readerIPaddress']}'"
return {"status": "OK"}
7条答案
按热度按时间muk1a3rh1#
几乎可以找到
Request
对象中的所有内容您可以使用
request.json()
获取请求主体,它将给予解析后的JSON作为字典。如果要以字符串形式访问主体,可以使用
request.body()
ufj5ltwl2#
接受的answer也是有效的,但FastAPI提供了一种内置的方法来实现这一点-检查文档中主体部分的奇异值。
默认值为
Body
的参数获取所有与传递的Pydant类型参数不匹配的有效负载(在我们的例子中是整个有效负载),并将其转换为dict。UPD:
...
(省略号)的注解-它允许根据需要标记值。更多信息请参阅省略号文档中的必需部分laik7k3q3#
示例
回复:
回复:
如果您不确定传入数据的 * 内容类型 *,最好解析 * 请求正文 *。
它可以被实现为,
这种方法的优点是主体可以包含任何类型的数据,JSON、表单数据、多部分表单数据等等。
wrrgggsh4#
将返回JSON对象。
epfja78i5#
这是一个打印
Request
内容的例子,它将打印json主体(如果它是json可解析的),否则只打印主体的原始字节。ar5n3qh56#
FastAPI有一个JSON encoder。
在某些情况下,您可能需要将数据类型(如Pydantic模型)转换为与JSON兼容的类型
cgfeq70w7#
对于使用BaseModel并希望拥有JSON字段的用户,可以从pydantic导入JSON