Fast API
中文文档:https://fastapi.tiangolo.com/zh/
坑一
关于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 会报错:
这里访问时需要把地址加上最后的那个 ‘ / ’ 。