最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python FastAPI入門安裝使用

 更新時間:2025年03月12日 14:18:47   作者:道友老李  
FastAPI是一個現(xiàn)代、快速的Python Web框架,用于構(gòu)建API,它基于Python 3.6+的類型提示特性,使得代碼更加簡潔且易于綬護(hù),這篇文章主要介紹了Python FastAPI入門安裝使用,需要的朋友可以參考下

第一節(jié):FastAPI入門

一、FastAPI框架介紹

FastAPI是一個現(xiàn)代、快速的Python Web框架,用于構(gòu)建API。它基于Python 3.6+的類型提示特性,使得代碼更加簡潔且易于綬護(hù)。

關(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。

FastAPI 站在巨人的肩膀上:

  • Starlette 用于構(gòu)建 Web 部件:Starlette 是一個輕量級的 ASGI 框架和工具包,特別適合用來構(gòu)建高性能的 asyncio 服務(wù).
  • Pydantic 用于數(shù)據(jù)的操作:python 中用于數(shù)據(jù)接口定義檢查與設(shè)置管理的庫。

什么是ASGI服務(wù)(WSGI)

WSGI,(WEB SERVER GATEWAY INTERFACE),Web服務(wù)器網(wǎng)關(guān)接口,是一種Web服務(wù)器網(wǎng)關(guān)接口,它是一個Web服務(wù)器(如Nginx,uWSGI等服務(wù)器)與Web應(yīng)用(如Flask框架寫的程序)通信的一種規(guī)范。當(dāng)前運(yùn)行在WSGI協(xié)議之上的Web框架有Bottle,F(xiàn)lask,Django。

ASGI:異步網(wǎng)關(guān)協(xié)議接口( Asynchronous Server Gateway Interface ) ,一個介于網(wǎng)絡(luò)協(xié)議服務(wù)和Python應(yīng)用之間的標(biāo)準(zhǔn)接口,能夠處理多種通用的協(xié)議類型,包括HTTP,HTTP2和WebSocket。

WSGI和ASGI的區(qū)別

WSGI是基于HTTP協(xié)議模式的,不支持WebSocket,而ASGI的誕生則是為了解決Python常用的WSGI不支持當(dāng)前Web開發(fā)中的一些新的協(xié)議標(biāo)準(zhǔn)。同時,ASGI對于WSGI原有的模式的支持和WebSocket的擴(kuò)展,即ASGI是WSGI的擴(kuò)展。

1、補(bǔ)充Web開發(fā)

Web應(yīng)用開發(fā)主要是建立在B/S架構(gòu)模式下,衍生出來的一系列web應(yīng)用程序,即主要是基于瀏覽器的應(yīng)用程序開發(fā),這也是web應(yīng)用程序開發(fā)的基礎(chǔ),比如淘寶、京東、當(dāng)當(dāng)網(wǎng)等。Web開發(fā)在近年來,隨著本身技術(shù)的突破以及移動設(shè)備的普及,基于web領(lǐng)域的開發(fā),也出現(xiàn)了明確的崗位職責(zé)分工,一個web互聯(lián)網(wǎng)產(chǎn)品中,基本上會分為web UI設(shè)計、Web前端開發(fā)以及web后端開發(fā)。

1)Web前端開發(fā)

Web前端開發(fā)用到的編程語言主要有javascript,以及伴隨有標(biāo)記性文本語言html和樣式渲染方式CSS。以及近年來衍生出來的一批優(yōu)秀web前端框架,使web前端在應(yīng)用構(gòu)建方面的效率得到顯著提升。另外nodeJs的出現(xiàn),越來越多的web前端開發(fā)人員開始走入服務(wù)端編程領(lǐng)域,甚至在一些項(xiàng)目中扮演著web全棧開發(fā)的角色。

2)Web后端開發(fā)

Web后端開發(fā),主要用到的語言有python、php、java等,當(dāng)然隨著nodeJs的興起,也成為近年來服務(wù)端開發(fā)的另一種選擇。

Web應(yīng)用程序開發(fā)是基于瀏覽器的,瀏覽器本身已經(jīng)解決了多平臺性兼容的問題,所以web開發(fā)一般是無需考慮跨平臺所面臨的兼容性問題。但是,web開發(fā)領(lǐng)域需要解決的有另一類問題,那便是多端兼容以及融合的問題,雖然web是基于瀏覽器的,沒有跨平臺的問題,但多端的快速發(fā)展,是web開發(fā)領(lǐng)域的新問題,即PC端、移動端以及當(dāng)下比較火熱的各類小程序端。

二、FastAPI安裝

1、安裝Python虛擬環(huán)境

為什么要使用虛擬環(huán)境

  • 項(xiàng)目部署時,直接導(dǎo)出項(xiàng)目對應(yīng)的環(huán)境中的庫就可以了;
  • 同時開發(fā)多個項(xiàng)目,各自項(xiàng)目使用的python版本不同,譬如一個是python2,另一個是python3,那么需要來回的切換python版本;
  • 當(dāng)你同時開發(fā)多個項(xiàng)目時,特別是多個項(xiàng)目使用同一個庫,譬如:django,但是各自項(xiàng)目使用的django的版本不一致時,那么你在開發(fā)這些項(xiàng)目時,需要來回的卸載和安裝不同的版本,因?yàn)橥粋€python環(huán)境中,同名的庫只能有一個版本。

虛擬環(huán)境的安裝步驟

安裝好python環(huán)境

安裝虛擬環(huán)境庫,在cmd中輸入:

pip install virtualenv 

創(chuàng)建虛擬環(huán)境,在cmd中切換到需要創(chuàng)建虛擬環(huán)境的目錄下,執(zhí)行:

virtualenv env_name 

激活虛擬環(huán)境,在cmd中進(jìn)入到 第三步創(chuàng)建的 env_name/Scripts 目錄下,執(zhí)行:

activate

執(zhí)行成功后,在cmd中,當(dāng)前輸入行前面會有 (env_name) 的前綴

在當(dāng)前狀態(tài)下,使用 pip 就是在虛擬環(huán)境中安裝第三方庫了

退出虛擬環(huán)境,cmd中輸入:

deactivate

2、安裝FastAPI

需要安裝所有的可選依賴及對應(yīng)功能,包括了 uvicorn,你可以將其用作運(yùn)行代碼的服務(wù)器。

pip install fastapi[all] -i https://pypi.douban.com/simple/

你也可以分開來安裝。

假如你想將應(yīng)用程序部署到生產(chǎn)環(huán)境,你可能要執(zhí)行以下操作:

pip install fastapi

并且安裝 uvicorn來作為服務(wù)器:

pip install "uvicorn[standard]"

三、第一個FastAPI案例

創(chuàng)建一個main.py

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
    return 'hello'
@app.get("/hello/{name}")
def say_hello(name: str):
    return {"message": f"Hello {name}"}
# 可以不要
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

1、訪問接口和文檔

2、接口文檔半天打不開的解決

這個接口文檔調(diào)用了一個 js腳本,這個腳本是部署在國外的,總之 就是因?yàn)檫@個原因?qū)е挛覀儧]法訪問了,由此我們需要把這個腳本從網(wǎng)上下載下來,放到本地,把此處調(diào)用國外的腳本變成調(diào)用我們自己本地的,即可。

1)下載這些國外服務(wù)器的資源到一個static目錄中

2)復(fù)制到項(xiàng)目中

3)修改fastapi的源代碼

4) 在app中注冊static目錄

5)打開接口文檔

3、總結(jié)

1)uvicorn命令說明:

uvicorn main:app 命令含義如下:

  • mainmain.py 文件(一個 Python「模塊」)。
  • app:在 main.py 文件中通過 app = FastAPI() 創(chuàng)建的對象。
  • --reload:讓服務(wù)器在更新代碼后重新啟動。僅在開發(fā)時使用該選項(xiàng)。

2)app變量

這里的變量 app 會是 FastAPI 類的一個實(shí)例 變量名字。這個實(shí)例將是創(chuàng)建你所有 API 的主要交互對象。

也可以修改app變量名字:

from fastapi import FastAPI
my_awesome_api = FastAPI()
@my_awesome_api.get("/")
def root():
    return {"message": "Hello World"}

3)請求路徑(路由)

請求路徑指的是 URL 中從第一個 / 起的后半部分。所以,在一個這樣的 URL 中:

http://example.com/items/foo
http://127.0.0.1/items/foo

那么,真正的請求路徑(路由)是:/items/foo

在FastAPI中,路由的配置是通過: 裝飾器 完成的。

4)請求方法(操作)

在 HTTP 協(xié)議中,你可以使用以下的其中一種(或多種)請求方法 與每個路徑進(jìn)行通信。

通常使用:

  • POST:創(chuàng)建數(shù)據(jù)。
  • GET:讀取數(shù)據(jù)。
  • PUT:更新數(shù)據(jù)。
  • DELETE:刪除數(shù)據(jù)。
  • PATCH: 修改單一數(shù)據(jù)

配置請求方法:

  • @app.post()
  • @app.put()
  • @app.delete()
  • @app.get()

以及更少見的:

  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

 5)路由+請求方法 +函數(shù)的映射

  • 路徑 :是 /
  • 操作 :是 get
  • 函數(shù) :是位于「裝飾器」下方的函數(shù)(位于 @app.get("/") 下方)
@app.get("/")
def root():
    return {"message": "Hello World"}

6)返回響應(yīng)

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
    return {"message": "Hello World"}  # 返回響應(yīng)

你還可以返回一個 dict、list,像 str、int 一樣的單個值,等等。你還可以返回 Pydantic 模型。還有許多其他將會自動轉(zhuǎn)換為 JSON 的對象和模型(包括 ORM 對象等)。

四、路由參數(shù)

你可以使用與 Python 格式化字符串相同的語法來聲明路徑"參數(shù)"或"變量":

@app.get("/items/{item_id}")
def read_item(item_id):
    return {"item_id": item_id}

路徑參數(shù) item_id 的值將作為參數(shù) item_id 傳遞給你的函數(shù)。所以,如果你運(yùn)行示例并訪問 http://127.0.0.1:8000/items/foo,將會看到如下響應(yīng):

{"item_id":"foo"}

1、定義參數(shù)的類型

你可以使用標(biāo)準(zhǔn)的 Python 類型標(biāo)注為函數(shù)中的路徑參數(shù)聲明類型。

@app.get("/items/{item_id}")
def read_item(item_id: int):
    return {"item_id": item_id}

在這個例子中,item_id 被聲明為 int 類型。FastAPI 通過上面的類型聲明提供了對請求的自動"解析"。

同時還提供數(shù)據(jù)校驗(yàn)功能:

如果你通過瀏覽器訪問 http://127.0.0.1:8000/items/foo,你會看到一個清晰可讀的 HTTP 錯誤:

{
    "detail": [
        {
            "loc": [
                "path",
                "item_id"
            ],
            "msg": "value is not a valid integer",
            "type": "type_error.integer"
        }
    ]
}

因?yàn)槁窂絽?shù) item_id 傳入的值為 "foo",它不是一個 int。

你可以使用同樣的類型聲明來聲明 str、float、bool 以及許多其他的復(fù)合數(shù)據(jù)類型。

2、路由匹配的順序

由于路由匹配操作是按順序依次運(yùn)行的,你需要確保路徑 /users/me 聲明在路徑 /users/{user_id}之前:

@app.get("/users/me")
def read_user_me():
    return {"user_id": "the current user"}
@app.get("/users/{user_id}")
def read_user(user_id: str):
    return {"user_id": user_id}

否則,/users/{user_id} 的路徑還將與 /users/me 相匹配,"認(rèn)為"自己正在接收一個值為 "me"user_id 參數(shù)。

3、預(yù)設(shè)值參數(shù)

如果你有一個接收路徑參數(shù)的路徑操作,但你希望預(yù)先設(shè)定可能的有效參數(shù)值,則可以使用標(biāo)準(zhǔn)的 Python Enum 類型。

Python中的枚舉數(shù)據(jù)類型:是指列出有窮集合中的所有元素,即一一列舉的意思。在Python中,枚舉可以視為是一種數(shù)據(jù)類型,當(dāng)一個變量的取值只有幾種有限的情況時,我們可以將其聲明為枚舉類型。例如表示周幾的這一變量weekday,只有七種可能的取值,我們就可以將其聲明為枚舉類型。

from enum import Enum
class Weekday(Enum):
    monday = 1
    tuesday = 2
    wednesday = 3
    thirsday = 4
    friday = 5
    saturday = 6
    sunday = 7
print(Weekday.wednesday)         # Weekday.wednesday  
print(type(Weekday.wednesday))   # <enum 'Weekday'>
print(Weekday.wednesday.name)    # wednesday
print(Weekday.wednesday.value)   # 3
from enum import Enum
from fastapi import FastAPI
class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"
app = FastAPI()
@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
    if model_name is ModelName.alexnet:
        return {"model_name": model_name, "message": "Deep Learning FTW!"}
    if model_name.value == "lenet":
        return {"model_name": model_name, "message": "LeCNN all the images"}
    return {"model_name": model_name, "message": "Have some residuals"}

到此這篇關(guān)于Python FastAPI入門安裝使用的文章就介紹到這了,更多相關(guān)Python FastAPI入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python偏函數(shù)partial用法

    python偏函數(shù)partial用法

    這篇文章要給大家分享得是python偏函數(shù)partial用法,主要介紹什么是偏函數(shù)partial、偏函數(shù)的作用、偏函數(shù)的語法及案例詳情,需要的朋友可以參考一下文章得具體詳解,希望對你有所幫助
    2021-10-10
  • 打包發(fā)布Python模塊的方法詳解

    打包發(fā)布Python模塊的方法詳解

    這篇文章我們來學(xué)習(xí)打包與發(fā)布你的Python模塊的基礎(chǔ)知識以及方法,非常的簡單實(shí)用。所以不要浪費(fèi)時間了,咱們開始吧!
    2016-09-09
  • pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解

    pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解

    這篇文章主要為大家介紹了pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Python and、or以及and-or語法總結(jié)

    Python and、or以及and-or語法總結(jié)

    這篇文章主要介紹了Python and、or以及and-or語法總結(jié),本文分別給出實(shí)例講解它們的使用方法,需要的朋友可以參考下
    2015-04-04
  • Python返回數(shù)組/List長度的實(shí)例

    Python返回數(shù)組/List長度的實(shí)例

    今天小編就為大家分享一篇Python返回數(shù)組/List長度的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 解決python中os.system調(diào)用exe文件的問題

    解決python中os.system調(diào)用exe文件的問題

    這篇文章主要介紹了解決python中os.system調(diào)用exe文件的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python使用os模塊和fileinput模塊來操作文件目錄

    Python使用os模塊和fileinput模塊來操作文件目錄

    這篇文章主要介紹了Python編程中使用os模塊和fileinput模塊來操作文件的方法,包括獲取路徑和創(chuàng)建愛你刪除目錄等基本操作的例子,需要的朋友可以參考下
    2016-01-01
  • python保存字符串到文件的方法

    python保存字符串到文件的方法

    這篇文章主要介紹了python保存字符串到文件的方法,實(shí)例分析了Python文件與字符串操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • 在Python中使用K-Means聚類和PCA主成分分析進(jìn)行圖像壓縮

    在Python中使用K-Means聚類和PCA主成分分析進(jìn)行圖像壓縮

    這篇文章主要介紹了在Python中使用K-Means聚類和PCA主成分分析進(jìn)行圖像壓縮,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python實(shí)現(xiàn)發(fā)送郵件功能代碼

    python實(shí)現(xiàn)發(fā)送郵件功能代碼

    這篇文章主要介紹了python實(shí)現(xiàn)發(fā)送郵件功能代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

洛川县| 成都市| 康定县| 翁牛特旗| 乌拉特后旗| 讷河市| 浦县| 哈密市| 大足县| 广南县| 周至县| 西城区| 安远县| 安溪县| 闵行区| 山东| 铁岭县| 曲沃县| 肃南| 托克逊县| 珠海市| 淳安县| 宽甸| 巫山县| 汤原县| 南汇区| 张家川| 楚雄市| 天全县| 庆安县| 井研县| 林州市| 永登县| 漳州市| 宜宾县| 海兴县| 体育| 腾冲县| 睢宁县| 儋州市| 肇东市|