Fastapi中是用模板来匹配URL:
- 路径参数获取:获取自定义的构造URL时的参数
- Get参数获取:获取一个URL后面带的
?param1=1¶m2=2
这种参数 - Post参数获取:获取Post时的参数,因为Post是加密的,因此更加安全,但有额外开销
路径参数获取
比如:
http://127.0.0.1:5555/name=aa/age=324
http://127.0.0.1:5555/name=bb/age=423
http://127.0.0.1:5555/name=cc/age=2345678
匹配的模板就是:http://127.0.0.1:5555/name=值1/age=值2
,对应的写法是:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/name={n}/age={ag}")
async def server1(n, ag):
return {
"name": n,
"age": ag,
}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=5555)
注意:获取参数的函数中的参数,需要与大括号里({}
)的参数相同
Get参数获取
访问:http://127.0.0.1:5555/get/?name=aa&age=423
后得到结果
from fastapi import FastAPI, Query
import uvicorn
app = FastAPI()
@app.get("/get/")
async def server2(name=Query(None), age=Query(None)):
return {
"name": name,
"age": age,
}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=5555)
参数里name=Query(None)
:
-
name对应着传入URL里的
?name=xxx
-
Query()是导的包
from fastapi import Query
-
Query(None)里的
None
是默认值,可以是任意值,当URL里没有传入这个参数时,就会用默认值替代
Post参数获取
from fastapi import FastAPI
from fastapi import Body
import uvicorn
app = FastAPI()
@app.post("/post/")
async def server3(name=Body(None), age=Body(None)):
return {
"name": name,
"age": age,
}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=5555)
Body
的写法与用法和Query
相同,括号里是默认值
完整代码
# -*- coding:utf-8 -*-
from fastapi import FastAPI
from fastapi import Query
from fastapi import Body
import uvicorn
app = FastAPI()
@app.get("/name={n}/age={ag}")
async def server1(n, ag): # 路径参数:http://127.0.0.1:5555/name=aa/age=423
return {
"name": n,
"age": ag,
}
@app.get("/get/")
async def server2(name=Query(None), age=Query(None)): # get参数:http://127.0.0.1:5555/get/?name=aa&age=423
return {
"name": name,
"age": age,
}
# post参数:http://127.0.0.1:5555/post/
# post时body里设置:{"name":"aaa","age":123}
@app.post("/post/")
async def server3(name=Body(None), age=Body(None)):
return {
"name": name,
"age": age,
}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=5555)