FastAPI 概述
參考文檔:
- 中文文檔
- 輕松上手Python的Web神器:FastAPI教程
介紹
FastAPI 是一個基于 Python 的現(xiàn)代 Web 框架,它具有快速構(gòu)建高性能 API 的特點(diǎn)。
FastAPI 關(guān)鍵特性:
- 快速:可與 NodeJS 和 Go 并肩的極高性能(歸功于 Starlette 和 Pydantic)。最快的 Python web 框架之一。
- 高效編碼:提高功能開發(fā)速度約 200% 至 300%。
- 更少 bug:減少約 40% 的人為(開發(fā)者)導(dǎo)致錯誤。
- 智能:極佳的編輯器支持。處處皆可自動補(bǔ)全,減少調(diào)試時間。
- 簡單:設(shè)計的易于使用和學(xué)習(xí),閱讀文檔的時間更短。
- 簡短:使代碼重復(fù)最小化。通過不同的參數(shù)聲明實(shí)現(xiàn)豐富功能。bug 更少。
- 健壯:生產(chǎn)可用級別的代碼。還有自動生成的交互式文檔。
- 標(biāo)準(zhǔn)化:基于(并完全兼容)API 的相關(guān)開放標(biāo)準(zhǔn):OpenAPI (以前被稱為 Swagger) 和 JSON Schema。
常見 Python Web 框架的介紹與區(qū)別
性能:
-
Django:是一個全功能的框架,它提供了許多內(nèi)置的功能和擴(kuò)展。雖然它在性能方面相對較低,但它非常適合構(gòu)建大型應(yīng)用程序。
-
Flask:是一個輕量級的框架,它更加注重簡潔和靈活性。相比于 Django,F(xiàn)lask 具有更好的性能表現(xiàn),但它的功能相對較少。
-
FastAPI:是一個高性能的框架,它基于異步請求處理和類型注解。FastAPI 比 Django 和 Flask 在性能上更為出色,并且它使用 Python 的 asyncio 庫來實(shí)現(xiàn)高效的并發(fā)請求處理。
開發(fā)難度:
- Django:是一個全功能的框架,它提供了許多現(xiàn)成的功能和組件,使得開發(fā)更加快速和簡單。但是,對于初學(xué)者來說,Django的學(xué)習(xí)曲線可能相對較陡。
- Flask:是一個簡潔而靈活的框架,它更多地側(cè)重于自定義和配置。相對于 Django,F(xiàn)lask 的學(xué)習(xí)曲線較為平緩,適合小型和簡單的項(xiàng)目。
- FastAPI:使用了類型注解和自動生成文檔的功能,使代碼更易讀和維護(hù)。它提供了基于標(biāo)準(zhǔn)的API模式和強(qiáng)大的驗(yàn)證工具,減少了開發(fā)過程中的錯誤。
推廣程度:
-
Django:是最受歡迎和廣泛使用的 Python Web 框架之一。它擁有龐大的社區(qū)支持和豐富的文檔資源,可以輕松找到相關(guān)的教程、插件和解決方案。
-
Flask:是一個比較受歡迎的框架,擁有龐大的社區(qū)和豐富的擴(kuò)展庫。雖然它的用戶群體相對較小,但在小型項(xiàng)目和快速原型開發(fā)中非常流行。
-
FastAPI:是一個相對較新的框架,但它正在迅速獲得開發(fā)者的關(guān)注。它的高性能和現(xiàn)代特性吸引了許多開發(fā)者,并且社區(qū)正在逐漸擴(kuò)大。
FastAPI 是一個用于構(gòu)建 API 的現(xiàn)代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于標(biāo)準(zhǔn)的 Python 類型提示。
入門示例
-
安裝 FastAPI 和 uvicorn
FastAPI 使用 uvicorn 作為默認(rèn)的 Web 服務(wù)。因此,需要在安裝 FastAPI 和 uvicorn
uvicorn 是一個輕量級的 ASGI(異步服務(wù)器網(wǎng)關(guān)接口)服務(wù)器
pip install fastapi pip install uvicorn
-
示例代碼
from fastapi import FastAPI import uvicorn # 創(chuàng)建一個FastAPI應(yīng)用程序?qū)嵗?/span> app = FastAPI() # 定義路由(使用裝飾器將函數(shù)綁定到特定的路徑和HTTP方法) @app.get("/") async def root(): return {"message": "Hello World"} @app.get("/items/{item_id}") def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q} # 啟動程序時使用 uvicorn 允許 FastAPI 應(yīng)用程序 uvicorn.run(app) # 默認(rèn)ip為127.0.0.1,默認(rèn)端口為8000
啟動 web 服務(wù)
-
方式1:uvicorn 內(nèi)嵌式
在代碼中使用
uvicorn.run(app)
啟用 uvicorn 服務(wù)器運(yùn)行 python 服務(wù),然后使用 python 啟動 py 模塊import uvicorn app = FastAPI() uvicorn.run(app)
-
方式2:uvicorn 外啟式
在命令行輸入命令:
uvicorn main:app --host 0.0.0.0 --port 80 --reload
- main:啟動服務(wù)的py文件名
- app:服務(wù)對象名
- –-host:ip地址
- –-port:端口
- –-reload:代碼修改后自動重啟服務(wù)。僅在開發(fā)時使用,上線后不要帶這個參數(shù),會降低性能
uvicorn.run 支持的參數(shù)
- app :指定應(yīng)用 app。‘腳本名:FastAPI 實(shí)例對象’ 或 FastAPI 實(shí)例對象
- host :字符串,允許被訪問的形式:locahost、127.0.0.1、當(dāng)前 IP、0.0.0.0。默認(rèn)為127.0.0.1
- port :數(shù)字,應(yīng)用的端口,默認(rèn)為 8000
- uds :字符串,socket 服務(wù)綁定到 UNIX 的域名
- fd :數(shù)字,從此文件描述符綁定到socket
- loop :事件循環(huán)模式。選項(xiàng)列表為 [auto|asyncio|uvloop],默認(rèn)為 auto
- http :HTTP協(xié)議實(shí)現(xiàn)。選項(xiàng)列表為 [auto|h11|httptools],默認(rèn)為auto
- ws :WebSocket協(xié)議實(shí)現(xiàn)。選項(xiàng)列表為 [auto|none|websockets|wsproto],默認(rèn)為auto
- ws-max-size :數(shù)字,WebSocket 最大消息大?。ㄗ止?jié)),默認(rèn)值為 16777216
- lifespan :生命周期實(shí)施。選項(xiàng)列表為 [auto|on|off],默認(rèn)為auto
- env-file :PATH,環(huán)境配置文件
-
log-config :PATH,日志配置文件。支持的格式:
.ini
、.json
、.yaml
,默認(rèn)為 fastapi 默認(rèn)的 log 配置 - log-level :日志級別。選項(xiàng)列表為 [critical|error|warning|info|debug|trace],默認(rèn) info
- access-log :boolean,access log 日志的開關(guān),默認(rèn)為 True
- use-colors :boolean,彩色日志的開關(guān)(前提需指定log-config),默認(rèn)為 None
- interface :選擇 ASGI3、ASGI2 或 WSGI 作為應(yīng)用程序接口。選項(xiàng)列表為 [auto|asgi3|asgi2|wsgi],默認(rèn)為 auto
- debug :是否使用 debug 模式,默認(rèn)False,
- reload :boolean,當(dāng)代碼發(fā)生更時,是否自動重啟,默認(rèn) False,
- reload_dirs :字符串,設(shè)置重新加載目錄,當(dāng)沒有傳這個參數(shù)的實(shí)時,將取當(dāng)前工作目錄
- reload-delay :float,每隔多久檢測代碼是否有變動,默認(rèn) 0.25 秒
-
workers :數(shù)字,工作進(jìn)程數(shù)。默認(rèn)為
WEB_CONCURRENCY
環(huán)境變量(如果可用) 或 1。對于 --reload 無效。 - proxy-headers :boolean,啟用/禁用 X-Forwarded-Proto、X-Forwarded-For、X-Forwarded-Port 以填充遠(yuǎn)程地址信息,默認(rèn)為 True
-
forwarded-allow-ips :字符串,用逗號分隔的IP列表以信任代理標(biāo)頭。默認(rèn)為
FORWARDED_ALLOW_IPS
環(huán)境變量(如果可用),或 None,為 None 時,代碼里面則取 127.0.0.1 - root-path :字符串,為安裝在給定 URL 路徑下的應(yīng)用程序設(shè)置 ASGI “根路徑”。
- limit-concurrency :數(shù)字,在發(fā)出 HTTP503 響應(yīng)之前,允許的最大并發(fā)連接數(shù)或任務(wù)數(shù)。默認(rèn)為 None
- limit-max-requests :數(shù)字,達(dá)到多少請求數(shù)則終止進(jìn)程,默認(rèn)為 None
- backlog :數(shù)字,等待處理的最大連接數(shù),默認(rèn)為 2048
- timeout-keep-alive :數(shù)字,如果在此超時時間內(nèi)未收到新數(shù)據(jù),則關(guān)閉保持活動狀態(tài)的連接,默認(rèn)為 5
- ssl-keyfile :字符串,SSL密鑰文件,默認(rèn)為 None
- ssl-certfile :字符串,SSL證書文件,默認(rèn)為 None
- ssl-keyfile-password :字符串,SSL密鑰文件密碼,默認(rèn)為 None
- ssl-version :數(shù)字,要使用的 SSL版本(詳見 stdlib SS L模塊),默認(rèn)為 2
- ssl-cert-reqs :數(shù)字,是否需要客戶端證書(詳見 stdlib SSL 模塊),默認(rèn)為 0
- ssl-ca-certs :字符串,CA 證書文件
- ssl-ciphers :字符串,要使用的 CA 證書文件密碼(詳見 stdlib SSL 模塊),默認(rèn)為 TLSv1
- header :字典,自定義響應(yīng)頭信息,鍵值對的形式,默認(rèn)為 None
常用 API
app=FastAPI() :創(chuàng)建 FastAPI 應(yīng)用程序?qū)嵗?/h3>
-
app = FastAPI()
是在 FastAPI 中創(chuàng)建應(yīng)用程序?qū)嵗某R娮龇?。這行代碼創(chuàng)建了一個 FastAPI 應(yīng)用程序?qū)ο?,可以在這個對象上定義路由、中間件、異常處理等。
-
應(yīng)用程序?qū)嵗?app
具有許多屬性和方法,用于配置和管理應(yīng)用程序的各個方面,如路由、中間件、異常處理、依賴注入等。通過創(chuàng)建 app
實(shí)例,可以在其中定義和組織應(yīng)用程序的邏輯。
-
代碼示例
from fastapi import FastAPI
app = FastAPI()
-
支持參數(shù)(均為可選傳):
-
debug :調(diào)試模式,True/False。此屬性繼承自 starlette,在 starlette 中使用的是 property 裝飾器
-
routes :路由列表,默認(rèn)值為 None
此屬性繼承自 starlette,類型為 startlette 的 BaseRoute 列表,BaseRoute 與 starlette 的基礎(chǔ)類型 Scope 有關(guān)
-
title :API文檔的標(biāo)題,默認(rèn)值 FastAPI
-
description :API文檔的描述,默認(rèn)為空
-
version :API 接口的版本號
-
openapi_url :OpenAPI 文件路徑,默認(rèn)為 /opanapi.json
-
openapi_prefix :OpenAPI 文件路徑前綴,默認(rèn)為空
-
default_response_class :默認(rèn)響應(yīng)類型,默認(rèn)為 JSONResponse
此參數(shù)繼承自 startlette 的 Response,有 HTMLResponse、PlainTextResponse、UJSONResponse、RedirectResponse、StreamingResponse、FileResponse 和 JSONResponse 七種,使用時需加載 starlette.responses 模塊
-
docs_url :交互式文檔路徑,默認(rèn)為 /docs
-
redoc_url :可選式文檔路徑,默認(rèn)為 /redoc
-
swagger_ui_oauth2_redirect_url :OAuth 重定向路徑,默認(rèn)為 /docs/oauth2-redirect
-
swagger_ui_init_oauth :OAuth 重定向字典,默認(rèn)為 None
-
middleware :中間件,默認(rèn)為空
-
exception_handlers :異常處理方法,默認(rèn)為 None
-
on_startup :app 啟動時調(diào)用的方法列表
-
on_shutdown :app 關(guān)閉時調(diào)用的方法列表
-
extra : 額外可選參數(shù)
FastAPI() 實(shí)例常用 API
get()、post() 等:定義 HTTP 請求的路由
app = FastAPI()
是在 FastAPI 中創(chuàng)建應(yīng)用程序?qū)嵗某R娮龇?。這行代碼創(chuàng)建了一個 FastAPI 應(yīng)用程序?qū)ο?,可以在這個對象上定義路由、中間件、異常處理等。
應(yīng)用程序?qū)嵗?app
具有許多屬性和方法,用于配置和管理應(yīng)用程序的各個方面,如路由、中間件、異常處理、依賴注入等。通過創(chuàng)建 app
實(shí)例,可以在其中定義和組織應(yīng)用程序的邏輯。
代碼示例
from fastapi import FastAPI
app = FastAPI()
支持參數(shù)(均為可選傳):
-
debug :調(diào)試模式,True/False。此屬性繼承自 starlette,在 starlette 中使用的是 property 裝飾器
-
routes :路由列表,默認(rèn)值為 None
此屬性繼承自 starlette,類型為 startlette 的 BaseRoute 列表,BaseRoute 與 starlette 的基礎(chǔ)類型 Scope 有關(guān)
-
title :API文檔的標(biāo)題,默認(rèn)值 FastAPI
-
description :API文檔的描述,默認(rèn)為空
-
version :API 接口的版本號
-
openapi_url :OpenAPI 文件路徑,默認(rèn)為
/opanapi.json
-
openapi_prefix :OpenAPI 文件路徑前綴,默認(rèn)為空
-
default_response_class :默認(rèn)響應(yīng)類型,默認(rèn)為 JSONResponse
此參數(shù)繼承自 startlette 的 Response,有 HTMLResponse、PlainTextResponse、UJSONResponse、RedirectResponse、StreamingResponse、FileResponse 和 JSONResponse 七種,使用時需加載 starlette.responses 模塊
-
docs_url :交互式文檔路徑,默認(rèn)為
/docs
-
redoc_url :可選式文檔路徑,默認(rèn)為
/redoc
-
swagger_ui_oauth2_redirect_url :OAuth 重定向路徑,默認(rèn)為
/docs/oauth2-redirect
-
swagger_ui_init_oauth :OAuth 重定向字典,默認(rèn)為 None
-
middleware :中間件,默認(rèn)為空
-
exception_handlers :異常處理方法,默認(rèn)為 None
-
on_startup :app 啟動時調(diào)用的方法列表
-
on_shutdown :app 關(guān)閉時調(diào)用的方法列表
-
extra : 額外可選參數(shù)
在 FastAPI 中,app.get()
、app.post()
等方法用于定義 HTTP 請求的路由。這些方法接受多個參數(shù),用于指定路由的路徑、請求處理函數(shù)、依賴項(xiàng)等。
以下是主要參數(shù):
-
path
(必填):用于指定路由的路徑。這是一個字符串,表示 URL 路徑,可以包含路徑參數(shù)和查詢參數(shù)。 -
response_model
:用于指定響應(yīng)模型。響應(yīng)模型是響應(yīng)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),通常使用 Pydantic 模型來定義。 -
summary
:一個簡短的字符串,用于描述路由的目的或功能。 -
description
:用于提供更詳細(xì)的路由說明。 -
tags
:一個字符串列表,用于標(biāo)記路由,以便在文檔中分類和組織路由。 -
dependencies
:一個列表,指定在路由處理函數(shù)中需要注入的依賴項(xiàng)。 -
response_description
:用于指定響應(yīng)的描述信息。 -
deprecated
:一個布爾值,表示路由是否已被棄用。 -
status_code
:用于指定響應(yīng)的 HTTP 狀態(tài)碼。 -
response_model_include
和response_model_exclude
:用于指定在響應(yīng)模型中包含或排除的字段。 -
response_model_by_alias
:一個布爾值,表示是否使用 Pydantic 模型中的別名來序列化響應(yīng)。 -
response_model_exclude_unset
:一個布爾值,表示在響應(yīng)中排除未設(shè)置的字段。 -
response_model_exclude_defaults
:一個布爾值,表示在響應(yīng)中排除具有默認(rèn)值的字段。 -
response_model_exclude_none
:一個布爾值,表示在響應(yīng)中排除值為 None 的字段。 -
operation_id
:用于指定操作的唯一標(biāo)識符。 -
deprecated
:一個布爾值,表示路由是否已被棄用。 -
callbacks
:一個字典,用于指定回調(diào)函數(shù)。
這些參數(shù)可以根據(jù)需求來靈活配置。一般來說,path
參數(shù)是必需的,而其他參數(shù)則根據(jù)需要來選擇性地使用。
add_middleware():添加中間件
-
add_middleware() 函數(shù):是 FastAPI 中用于添加中間件的方法。
中間件是一種可以在請求和響應(yīng)處理過程中進(jìn)行預(yù)處理和后處理的功能??梢允褂弥虚g件來實(shí)現(xiàn)各種需求,如添加全局頭部、請求日志記錄、異常處理等。
通過
app.add_middleware
方法將自定義中間件添加到應(yīng)用程序。當(dāng)請求到達(dá)時,F(xiàn)astAPI 會依次執(zhí)行添加的中間件,然后再調(diào)用路由處理函數(shù)。在響應(yīng)返回時,會按照相反的順序執(zhí)行中間件的后處理邏輯。通過添加中間件,可以在請求和響應(yīng)處理過程中實(shí)現(xiàn)一些通用的功能,而不需要在每個路由中重復(fù)編寫相同的代碼。這有助于保持代碼的整潔和可維護(hù)性。
-
常用參數(shù):
-
middleware_class(必需):一個中間件類,希望添加到應(yīng)用程序的中間件。
中間件類應(yīng)繼承自 fastapi.middleware.base.BaseHTTPMiddleware 或類似的基類。
-
**options:這是中間件的配置選項(xiàng),可以根據(jù)中間件的要求傳遞不同的參數(shù)。具體的選項(xiàng)取決于使用的中間件類。通常,可以傳遞任何與中間件相關(guān)的自定義參數(shù),以便在中間件類中使用。
-
CORSMiddleware 中間件
-
FastAPI 內(nèi)置的中間件,用于處理跨源資源共享(CORS)問題。
CORS 是一種瀏覽器安全機(jī)制,用于控制跨域請求。在前端和后端分離的應(yīng)用中,當(dāng)前端代碼(在瀏覽器中運(yùn)行)從一個域向另一個域發(fā)出請求時,瀏覽器會執(zhí)行跨域檢查,確保只有受信任的域可以訪問資源。
CORSMiddleware 可以幫助開發(fā)者配置 FastAPI 應(yīng)用程序以正確處理跨域請求。
配置完中間件后,F(xiàn)astAPI 會自動處理跨域請求,并在響應(yīng)中添加適當(dāng)?shù)念^部信息以滿足 CORS 安全要求。
請注意,CORS 配置涉及到應(yīng)用程序的安全性。在生產(chǎn)環(huán)境中,應(yīng)根據(jù)實(shí)際需求來配置
allow_origins
和其他參數(shù)。 -
常用參數(shù)(用于配置跨域策略):
-
allow_origins:允許訪問資源的域名列表。
可以使用
["*"]
表示允許所有域名,但這通常不是推薦的做法。 -
allow_credentials:是否允許發(fā)送憑據(jù)(如 cookie、HTTP 認(rèn)證頭部)的請求。
如果為
True
,則需要確保在客戶端和服務(wù)器端都進(jìn)行相應(yīng)的配置,且allow_origins
必須為具體的源,不可以是["*"]
-
allow_methods:允許的 HTTP 方法列表如
["GET", "POST"]
。默認(rèn)是["GET"]
可以使用
["*"]
表示允許所有方法 -
allow_headers:允許的 HTTP 頭部列表,如
["Content-Type", "Authorization"]
。默認(rèn)是[]
可以使用
["*"]
表示允許所有頭部注:Accept、Accept-Language、Content-Language 以及 Content-Type 總是被允許的
-
-
代碼示例:
from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() # 添加 CORS 中間件 app.add_middleware( CORSMiddleware, allow_origins=["http://localhost", "https://example.com"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], )
自定義中間件:
-
方式1:自定義中間件類,添加自定義中間件時通過 dispatch 參數(shù)傳遞自定義中間件類的對象
from fastapi import FastAPI, Request from fastapi.middleware.cors import BaseHTTPMiddleware # 自定義中間件 class MyMiddleware: def __init__(self, some_attribute: str = None): # some_attribute非必需,此處用于演示傳參到自定義的中間件 self.some_attribute = some_attribute async def __call__(self, request: Request, call_next): # do something with the request object # process the request and get the response response = await call_next(request) # do something with the response object return response app = FastAPI() # 添加自定義中間件 app.add_middleware(BaseHTTPMiddleware, dispatch=MyMiddleware())
-
方式2:自定義中間件類繼承 BaseHTTPMiddleware 類
# 自定義中間件 class MyMiddleware(BaseHTTPMiddleware): def __init__(self, app, some_attribute: str): super().__init__(app) self.some_attribute = some_attribute async def dispatch(self, request: Request, call_next): # do something with the request object, for example content_type = request.headers.get('Content-Type') print(content_type) # process the request and get the response response = await call_next(request) return response app = FastAPI() # 添加自定義中間件 app.add_middleware(MyMiddleware)
-
方式3:@app.middleware 裝飾器
在 FastAPI 中,可以使用
@app.middleware
裝飾器來添加應(yīng)用程序范圍的中間件。即使用
@app.middleware
裝飾器添加的中間件適用于整個 FastAPI 應(yīng)用程序,通常用于執(zhí)行全局操作,例如身份驗(yàn)證、日志記錄、異常處理等。這使得您可以在整個應(yīng)用程序中共享相同的中間件邏輯,而不需要為每個路由重復(fù)添加相同的中間件。此裝飾器可以接受以下兩個參數(shù):
-
middleware_type(必需):字符串參數(shù),用于指定中間件的類型。
在 FastAPI 中,中間件可以分為以下兩種類型:
-
“http”:HTTP 中間件
這種中間件將在每個 HTTP 請求處理期間執(zhí)行,適用于處理 HTTP 請求和響應(yīng)的操作。
-
“websocket”:WebSocket 中間件
這種中間件將在 WebSocket 連接的處理期間執(zhí)行,適用于處理 WebSocket 請求和響應(yīng)的操作。
-
-
priority(可選):整數(shù)參數(shù),用于指定中間件的優(yōu)先級。
如果應(yīng)用程序中有多個中間件,可以使用此參數(shù)來控制它們的執(zhí)行順序。
較小的數(shù)字表示較高的優(yōu)先級,中間件將按照優(yōu)先級升序執(zhí)行。
如果不指定 priority 參數(shù),中間件的默認(rèn)優(yōu)先級為 50。
app = FastAPI() # 自定義中間件處理函數(shù) @app.middleware("http") async def log_requests(request: Request, call_next): logger.info(f"Incoming request: {request.method} {request.url}") response = await call_next(request) logger.info(f"Outgoing response: {response.status_code}") return response
-
websocket():創(chuàng)建 WebSocket 路由
-
websocket() 函數(shù):創(chuàng)建 WebSocket 路由,從而實(shí)現(xiàn)與客戶端之間的實(shí)時雙向通信。
WebSocket 是一種在單個長連接上進(jìn)行全雙工通信的協(xié)議,適用于需要實(shí)時更新數(shù)據(jù)的應(yīng)用場景,例如聊天應(yīng)用、實(shí)時數(shù)據(jù)展示等。
在客戶端,可以使用瀏覽器內(nèi)置的 WebSocket API 或其他 WebSocket 客戶端庫來與 FastAPI WebSocket 路由進(jìn)行通信。
-
代碼示例:
from fastapi import FastAPI, WebSocket app = FastAPI() # WebSocket 路由 @app.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() while True: data = await websocket.receive_text() await websocket.send_text(f"You said: {data}")
- 使用
app.websocket()
方法創(chuàng)建了一個/ws
的 WebSocket 路由。在 WebSocket 連接建立后,使用await websocket.accept()
方法接受連接。 - 然后,在一個無限循環(huán)中使用
await websocket.receive_text()
方法接收客戶端發(fā)送的文本消息,并使用await websocket.send_text()
方法將消息返回給客戶端。
- 使用
mount():安裝子應(yīng)用程序(靜態(tài)文件)
-
mount() 函數(shù):用于將另一個 ASGI 應(yīng)用程序安裝為 FastAPI 應(yīng)用程序的子應(yīng)用程序。
使用
mount
安裝子應(yīng)用程序可以方便的將多個應(yīng)用程序組合在一起,實(shí)現(xiàn)更復(fù)雜的應(yīng)用程序邏輯結(jié)構(gòu)。例如,將多個 API 應(yīng)用程序組裝成一個網(wǎng)關(guān)應(yīng)用程序,將多個應(yīng)用程序組裝成一個單頁面應(yīng)用程序等等。支持參數(shù):
- path :類型為字符串,必傳參數(shù),指定 url 訪問的路徑
-
app :類型為 ASGIApp,必傳參數(shù),掛載的是靜態(tài)文件對象
- directory :指定掛載的是靜態(tài)文件目錄
- name :指定 fastapi 內(nèi)部使用的名稱。默認(rèn)為 None
-
訪問靜態(tài)文件方式:直接在瀏覽器輸入
ip:端口/路徑/文件全名.后綴
即可文章來源:http://www.zghlxwxcb.cn/news/detail-756654.html -
代碼示例(配置靜態(tài)文件路徑):文章來源地址http://www.zghlxwxcb.cn/news/detail-756654.html
import uvicorn from fastapi import FastAPI from fastapi.staticfiles import StaticFiles app = FastAPI() # 配置靜態(tài)文件路徑 app.mount("/static", StaticFiles(directory="static"), name="static") uvicorn.run(app="main:app", host="0.0.0.0", port=8000, reload=True)
到了這里,關(guān)于FastAPI 庫(Python 的 Web 框架)基本使用指南(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!