日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FastAPI ------框架基础

發布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FastAPI ------框架基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

FastAPI

  • 一、初知FastAPI
    • 1.1 FastAPI簡介
    • 1.2 安裝FastAPI
      • 1.2.1 虛擬環境安裝
      • 1.2.2 pip安裝FastAPI
    • 1.3 可能出現的問題
      • Error: [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。
      • 中文亂碼
  • 二、 第一個FastAPI
      • 2.1 方法一
      • 2.2 方法二
      • 2.3 方法三
      • 2.4運行效果
  • 三、API 文檔
      • 3.1 交互式API 文檔
      • 3.2 備用API 文檔
  • 四、 Path 路徑參數
      • 4.1 聲明路徑參數
      • 4.2 路徑參數的類型
      • 4.3 指定路徑順序
  • 五、 Query 查詢參數
      • 5.1 聲明 Query 參數
      • 5.2 設置Query 參數
  • 六、Request Body 請求體
    • 注意事項
    • 創建數據模型
  • 七、Header 請求頭參數
  • 八、Form 表單數據
  • 九、操作MySQL
    • 數據表模型
      • 數據庫配置文件:
      • 數據庫連接格式
      • 連接數據庫文件
      • 創建模型文件
    • 模型對象方法

一、初知FastAPI

1.1 FastAPI簡介

FastAPI是一種現代,快速(高性能)的Web框架,用于基于標準 Python類型提示使用Python 3.6+構建API。

基于以下第三方包開發(部分):

  • Starlette基于ASGI異步網關協議接口的框架 。
  • Pydantic數據驗證和設置管理庫。
  • Uvicorn基于 asyncio(異步io) 開發的一個輕量級高效的 web 服務器框架。
  • Requests HTTP庫。
  • Aiofiles 如果要使用FileResponse(文件相應)靜態文件。
  • Jinja2 網頁模板渲染引擎。
  • Python-multipart 表單解析。

1.2 安裝FastAPI

1.2.1 虛擬環境安裝

安裝

.venv1是虛擬環境名,不一定是這個可以自己起名。
安裝教程

激活:

venv1\Scripts\activate

1.2.2 pip安裝FastAPI

在虛擬環境中使用以下命令即可

pip install fastapi

由于啟動需要依賴于Uvicorn,還需要安裝,命令如下

uvicorn
官方解釋:自行搜索。
通俗解釋:就是一個ASGI服務器,就是把你代碼跑在一個你認識的一個平臺上。
ASGI服務器
解釋:異步網關協議接口。它是介于網絡協議服務和Python應用之間的標準接口。
通俗解釋:就是能夠處理多種通用的協議類型,例如:HTTP、HTTP2、WebSocket等

pip install uvicorn

1.3 可能出現的問題

Error: [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。

這種情況就是端口占用

中文亂碼


這種情況博主還沒解決,不過在PyCharm中運行就不會出現。

二、 第一個FastAPI

2.1 方法一

在虛擬環境中運行

  • 我們在虛擬環境中建立一個main.py文件
    文件內容如下
  • from fastapi import FastAPI app = FastAPI()@app.get("/")def read_root():return {"Hello","World"}

    第一行:導入了FastAPI類
    第二行:創建了該類的一個實例
    第四行:使用app()裝飾器告訴FastAPI什么樣的URL能觸發被裝飾的函數。

    需要注意的是:

  • 你可以將get操作方法更改成@app.post()、@app.put()、@app.delete()等方法
  • 你可以更改相應的路徑("/")為自己想要的,例如我更改為("/hello_word/")
  • 函數的返回值可以是
    dict,list,單獨的值,比如str,int,或者是Pydantic模型

  • 在虛擬環境下運行
  • uvicorn main:app --reload


    參數說明:
    main:main.py文件
    app :在main.py內部創建的對象,通過app = FastAPI()創建
    --reload :使服務器在代碼更改后重新啟動,僅在開發的時候使用就好了。

    2.2 方法二

    也可以不在虛擬環境下運行,這就需要在本機上安裝上面說的兩個庫。

    步驟和上面是類似的。

    2.3 方法三

    我們可不可以不用命令行運行呢,是可以的,看下面代碼:

    from fastapi import FastAPI import uvicorn app = FastAPI()@app.get("/")def read_root():return {"Hello","World"}if __name__ == '__main__':uvicorn.run(app=app,host="127.0.0.1",port=8000)

    添加了

    import uvicorn if __name__ == '__main__':uvicorn.run(app=app,host="127.0.0.1",port=8000)

    .host="127.0.0.1",port=8000,表示指定本地電腦為服務器,端口號為8001

    在PyCharm直接運行即可

    2.4運行效果

    三、API 文檔

    .FastAPI提供了兩種文檔形式:交互式API 文檔 和備份API 文檔

    3.1 交互式API 文檔

    在新建的main.py文件中寫入,如下代碼:

    from fastapi import FastAPI import uvicorn app = FastAPI()@app.get("/")async def read_root():return {"Hello","World"} @app.get("/items/{item_id}")def read_item(item_id:int,q:str =None):return {"item_id":item_id,"q":q}if __name__ == '__main__':uvicorn.run(app=app,host="127.0.0.1",port=8000)

    我們重點看第二個函數,其中{item_id}是路徑參數,q:str =None是查詢參數,詳細的會在后邊解釋。
    我們運行后,在瀏覽器中輸入http://127.0.0.1:8000/docs

    圖中的== GET ==就是 @app.get("/") 指定的請求方式,我們點擊第二個


    填入信息后 單擊 Execute按鈕。
    程序就會響應。

    3.2 備用API 文檔

    交互式是在后邊添加docs
    備份則是 redoc

    四、 Path 路徑參數

    4.1 聲明路徑參數

    @app.get("/items/{item_id}")def read_item(item_id:int):return {"item_id":item_id}
    • 其中{item_id}就是路徑參數,其值會作為參數item_id傳遞到read_item視圖函數中。

    4.2 路徑參數的類型

    路徑參數有多種類型,如int 、str、float等
    如上面的 item_id:int就是將路徑參數指定為int類型

    • 注意:如果指定類型之后,會自動進行類型效驗,如果不符合會顯示一個HTTP錯誤頁。

    我輸入http://127.0.0.1:8000/items/sd

    因為sd 是字符串型,而不是int型。

    4.3 指定路徑順序

    有了上面的路徑參數,或許你會問了,

    @app.get("/items/me")@app.get("/items/{item_id}")

    當我輸入http://127.0.0.1:8000/items/me會調用那個?

    • 路徑是以順序進行判斷的,簡單來說就是上邊的那個放在上面就會調用那個。

    五、 Query 查詢參數

    當聲明不屬于路徑參數的其他函數參數時, FastAPI會將其自動解釋為Query參數,也就是查詢參數。Query參數就是**URL地址中“?”之后的一系列 value鍵值對,每組鍵值對用“&”分割開來。**這也是我們在網址中經常看到的。

    5.1 聲明 Query 參數

    Query 參數 是在視圖函數中聲明的:如

    @app.get("/items/{item_id}")def read_item(item_id:int,q:str =None):return {"item_id":item_id,"q":q}
    • q:str =None 中 q 就是Query 參數。

    5.2 設置Query 參數

    Query 參數不是path 中固定的部分,它們是可選的,并且有默認值。

    在上面的例子中,Query 參數 擁有默認值 q= None

    如果訪問http://127.0.0.1:8000/items/1
    得到

    • 注意當參數沒有默認值的時候,那么這個參數就必須傳入。

    六、Request Body 請求體

    注意事項

  • 定義請求體,需要使用 Pydantic 模型
  • 不能通過GET請求發送請求體
  • 發送請求體數據,必須使用以下幾種方法之一:POST(最常見)、PUT、DELETE、PATCH
  • 創建數據模型

    實現請求體總共包含三個步驟。
    (1)定義模型。從pydantic中導入BaseModel

    from pydantic import BaseModel

    (2)創建模型。聲明模型需要一個類,且該類繼承BaseModel

    from pydantic import BaseModelclass Item(BaseModel):name: str description: str = Noneprice: float tax: float = None

    和Query參數一樣:數據類型的屬性如果不是必須的話,可以擁有一個默認值或者是可選None。否則,該屬性就是必須的。

    七、Header 請求頭參數

  • 首先導入 Header類
  • from fastapi import FastAPI,Header
  • 聲明Header參數。第一個值是默認值,可以傳遞所以驗證或注釋參數。
  • from fastapi import FastAPI,Headerapp = FastAPI()&app.get("/items/")async def read_items(*,userget : str = Header(None)):return {"userget":userget}

    八、Form 表單數據

  • 使用Form類需要先安裝python-multipart,安裝命令如下
  • pip install python-multipart
  • 從FastAPI中導入 Form
  • from fastapi import FastAPI,Form
  • 創建Form 參數。
  • from fastapi import FastAPI,Form app = FastAPI()@app.post("/login/")async def login(*,userneme : str = Form(...),password : str = Form(...)):return {"userneme":userneme}

    注意:async 是異步async/await功能。

    九、操作MySQL

    因為用到 ORM框架:SQLAlchemy。所以可以看下面這篇文章了解一下。
    ORM

    數據表模型

    使用SQLAlchemy進行數據庫操作,其具體設置如下:

    數據庫配置文件:

    class Config:SECRET_KEY = 'mrsoft' #密鑰SQLALCHEMY_TRACK_MODIFICATIONS = True# 數據庫鏈接地址SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:andy123456@localhost/idiom?charset=utf8mb4"

    數據庫連接格式

    dialect+driver://username:password@host:port/database
    • dialect:數據庫類型,比如mysql,sqlite,注意:一定要是小寫
    • driver:是python對應的驅動,如果不指定,則會使用默認的驅動,比如MySQL默認驅動是MySQLdb
    • username:數據庫用戶名
    • password:數據庫密碼
    • host:數據庫的域名
    • port:數據庫監聽的端口,通常默認是3306
    • database:連接的數據庫的名字
    • 連接地址后面還可以加上查詢字符串來設定,如charset=utf8

    連接數據庫文件

    from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmakerfrom fastapi_idiom.config import Config #創建引擎 engine = create_engine(Config.SQLALCHEMY_DATABASE_URL) #創建數據庫會話 SessionLocal = sessionmaker(autocommit= False,autoflush =False,bind = engine) #聲明基類,創建了一個ORM基類 Base = declarative_base()

    創建模型文件

    from sqlalchemy import Column,Integer,String,DateTime from fastapi_idiom.models.database import Base from datetime import datetime#會員數據模型 #定義 User 類 class User(Base):__tanlename__ = "user" #定義表名# 定義屬性#在這個ORM模型中創建一些屬性,來跟表中的字段進行一一映射。這些屬性必須#是sqlalchemy給我們提供好的數據類型id = Column(Integer,primary_key=True,index=True)openid = Column(String(80))nickname = Column(String(100))avatar = Column(String(255))level = Column(Integer)addtime = Column(DateTime,index=True,default=datetime.now)def __repr__(self):#Python中這個_repr_函數,對應repr(object)這個函數,返回一個可以用來表示對象的可打印字符串:return '<User %r>'%self.nickname

    模型對象方法

    為了實現代碼重用,需要將模型對象用到的方法寫入 一個文件中。

    from datetime import datetimeimport sqlalchemy from fastapi_idiom.models.database import SessionLocalfrom .models import User,Gamedb = SessionLocal() #創建會話# 獲取用戶信息 def get_user(openid : str):return db.query(User).filter(User.openid == openid).first()#創建用戶 def create_user(openid ,nickname,avatar):db_user = User(openid = openid,nickname = nickname,avatar = avatar,level = 0,addtime = datetime.now())db.add(db_user)db.commit()db.refresh(db_user)return db_user

    詳細的SQLAlchemy使用可以參考這篇文章:
    SQLAlchemy

    • python前端學習-----Flask進階
    • Flask實戰----做了一個簡易版CSDN

    總結

    以上是生活随笔為你收集整理的FastAPI ------框架基础的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。