FastAPI
首先講一下基礎(chǔ)操作弧可,然后在介紹這些操作的意義
1. 創(chuàng)建
假設(shè)你創(chuàng)建了一個main.py的函數(shù),并保存
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
uvicorn main:app --reload
然后你可以在cmd中使用啟動這個程序, 然后會顯示一下信息:
localhost@asdil:/tmp/study$ uvicorn mian:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [2414126] using statreload
INFO: Started server process [2414128]
INFO: Waiting for application startup.
INFO: Application startup complete.
接下來你在瀏覽器中打開http://127.0.0.1:8000就會顯示一個最基礎(chǔ)的get頁面
如果不是在本地,而是使用遠程服務(wù)器,那么你的啟動命令變成:
uvicorn main:app --host '遠程機器ip' --port 端口 --reload
比如:
uvicorn main:app --host '192.168.30.17' --port 8000 --reload
uvicorn參數(shù)解釋:
main: 指定主程序文件main.py文件, 如果main.py文件改成test.py 則命令也需要改為uvicorn test:app
app:在main.py中使用app = FastAPI()創(chuàng)建的對象
--host:遠程主機ip,如果是本地則可以不要這個參數(shù)
--host:端口號
--reload:在修改源代碼后程序會自動重新加載不用退出重新啟動
注意:
在使用 uvicorn main:app --reload啟動后,如果想shutdown請使用ctrl+c, 而不是ctrl+z哲鸳,后者其實是退出前臺,如果ctrl+z后你想在啟動會報端口被占用
2. get
這個是最常見的請求形式
(1) url參數(shù)
修改main.py
from fastapi import FastAPI
app = FastAPI()
# url參數(shù)定義在這個修飾器里面
@app.get("/{url}")
def read_root():
return {"Hello": "World"}
我們在@app.get中定義了url參數(shù)盔憨,那么我們下次get請求時就不能直接輸入http://127.0.0.1:8000而是http://127.0.0.1:8000/xxxx(xxxx表示任意字符串)
(2) param參數(shù)
修改main.py
from fastapi import FastAPI
app = FastAPI()
# url參數(shù)可以和param重合
@app.get("/{url}")
def read_root(url: str, parms_1: str, parms_2: str=None):
return {'url地址是: ': url, "parms_1參數(shù)是 ": parms_1, "parms_2參數(shù)是 ": parms_2}
這是輸入http://192.168.30.17:8000/anywords?parms_1=abc&parms_2=def就可以了徙菠,這里我使用的是遠程服務(wù)器,因此我指定了ip和端口
說明:
1.如果有parm參數(shù)則在地址后面加 ?,多個parm參數(shù)使用 & 連接
2.return中單引號和雙引號沒有區(qū)別
3.從上面可以看出url參數(shù)可以和parm參數(shù)合一郁岩,這是第一個url參數(shù)就不需要?url=婿奔,而是直接跟在端口80000/后面
3. post
post方法參數(shù)不是直接接在url后面,安全性會好一些
使用post時需要繼承BaseModel這個類
(1)body參數(shù)
from fastapi import FastAPI
from pydantic import BaseModel #fastapi的一個依賴,需要從pydantic中引入
app = FastAPI()
class Args(BaseModel): #繼承BaseModel
data_str: str #定義一個字符串型參數(shù)
data_int: int #定義一個整形參數(shù)
data_list: list #定義一個列表
@app.post("/test_post")
async def postEchoApi(args:Args): #設(shè)置剛才定義的參數(shù)
dict_args = args.dict() # 也可以轉(zhuǎn)化為字典
return {"str data":args.data_str,
'int data': args.data_int,
'list data':args.data_list,
'args 數(shù)據(jù)類型': str(type(args))}
測試post的時候就用postman就可以了问慎,注意是在Body選擇Raw在選擇Json形式傳入?yún)?shù)
3. 在服務(wù)器部署fastapi
第一種使用方式
uvicorn main:app --host '0.0.0.0' --port 8000 --reload --workers 1
第二種使用方式(推薦)
Gunicorn是一個成熟的萍摊、功能齊全的服務(wù)器和流程管理器。
Uvicorn包含一個Gunicorn worker類如叼,允許您運行ASGI應(yīng)用程序冰木,具有Uvicorn的所有性能優(yōu)勢,同時還為您提供了Gunicorn的全功能流程管理。
這允許您動態(tài)地增加或減少工作進程的數(shù)量踊沸,正常地重新啟動工作進程歇终,或者在不停機的情況下執(zhí)行服務(wù)器升級。
對于生產(chǎn)部署逼龟,我們建議將gunicorn與uvicorn worker類一起使用评凝。
gunicorn main:app -b 0.0.0.0:8000 -w 1 -k uvicorn.workers.UvicornWorker
===============================下次再寫===========================