关于FastAPI 踩坑记录~

Fast API

中文文档:https://fastapi.tiangolo.com/zh/
关于FastAPI 踩坑记录~_第1张图片

坑一

关于fastapi启动方式**
文件 test.py

# 文件名: test.py
from fastapi import FastAPI
# app设置
app = FastAPI(
    title="标题",
    description=" 描述",
    version = '1.0.0',
    docs_url = '/docs',
    redoc_url= '/redocs'
)
@service_app.get("/root/")
async def hello():
    return {"status_code":200,"message":"ok"}

print('start server')
if __name__ == '__main__':
    uvicorn.run("test:app",host="127.0.0.1", port=8001)

方法一 :可以像上述代码直接写在 代码中
方法二:命令行启动

uvicorn test:app --host '127.0.0.1' --port 8000 --reload

其中 运行的参数一定是 文件名:app名
如果这里写 main:app 是不行的

坑二

关于fastapi启动时重复运行
上述代码运行时会出现两个 start server
而我们的程序只写了一次,and 只运行了一次,简直是见了鬼~
毫无疑问,肯定是启动的时候出了一丢丢问题。

而换成方式二启动的时候就没有此问题

uvicorn.run("test:app",host="127.0.0.1", port=8001)

print出现两次说明在程序从上往下运行的时候运行了一次,然后再main中又调用了一次,因此将print()放入 main中测试

if __name__ == '__main__':
	print('start server')
    uvicorn.run("test:app",host="127.0.0.1", port=8001)

咦,可以了
但是方法二又不行了,所以还得再想想
等等,既然是调用了两次,除了第一次顺序执行,那么哪里又出现这个文件了?
让我们把目光锁定在
在这里插入图片描述
偶?原来你的用法和命令行里有区别~经过多方查证,,,,(emmm,其实就是自己瞎试出来的)
只需要把上面代码换成下面的代码就行~(attention:app没有引号

uvicorn.run(app,host="127.0.0.1", port=8001)

ok ok 改了半天的bug,原来只是几个字母呵,程序员的生活,就是这么的有趣且无聊

坑三

这个可能不算是fastapi的锅,不过在调用的时候有点问题,记录一下
class Data:
	name:str
@app.post("/api/banks/")
async def add(data: Data):
    if name in ['liming','xiaohong']:
    	return {"code":303,"message":"no such person"}
    return {"code":200,"message":f"hello {data.name}"}


@app.get("/api/banks/")
async def add(data: Data):
    return {"code":200,"message": ['liming','xiaohong']}

在访问时如果直接POST访问 127.0.0.1:8000/api/banks 会报错:
在这里插入图片描述
这里访问时需要把地址加上最后的那个 ‘ / ’ 。

你可能感兴趣的:(python后端,python,开发语言,后端)