国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FastAPI 構(gòu)建 API 高性能的 web 框架(二)

這篇具有很好參考價(jià)值的文章主要介紹了FastAPI 構(gòu)建 API 高性能的 web 框架(二)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

上一篇 FastAPI 構(gòu)建 API 高性能的 web 框架(一)是把LLM模型使用Fastapi的一些例子,本篇簡(jiǎn)單來(lái)看一下FastAPI的一些細(xì)節(jié)。
有中文官方文檔:fastapi中文文檔

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

pip install fastapi

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

pip install "uvicorn[standard]"

然后對(duì)你想使用的每個(gè)可選依賴項(xiàng)也執(zhí)行相同的操作。



1 基礎(chǔ)使用

參考:https://fastapi.tiangolo.com/zh/tutorial/body-multiple-params/

1.1 單個(gè)值Query的使用

from typing import Union

from fastapi import FastAPI, Query

app = FastAPI()


@app.get("/items/")
async def read_items(q: Union[str, None] = Query(default=None, max_length=50)):
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        results.update({"q": q})
    return results

這里Union[str, None] 代表參數(shù)q,可以是字符型也可以None不填,Query用來(lái)更多的補(bǔ)充信息,比如這個(gè)參數(shù),默認(rèn)值是None,最大長(zhǎng)度50

1.2 多個(gè)參數(shù)

from typing import Annotated

from fastapi import FastAPI, Path
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
# 檢查項(xiàng),不同key要遵從什么格式
    name: str
    description: str | None = None # 字符或者None都可以,默認(rèn)None
    price: float
    tax: float | None = None # 數(shù)值或者None都可以,默認(rèn)None


@app.put("/items/{item_id}")
async def update_item(
    item_id: Annotated[int, Path(title="The ID of the item to get", ge=0, le=1000)], # item_id是一個(gè)路徑,通過(guò)Annotated需要兩次驗(yàn)證,驗(yàn)證一,是否是整數(shù)型,驗(yàn)證二,數(shù)值大小 大于等于0,小于等于1000
    q: str | None = None, 
    item: Item | None = None, # 格式遵從class Item類且默認(rèn)為None
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    if item:
        results.update({"item": item})
    return results

1.3 請(qǐng)求參數(shù) Field

pydantic中比較常見(jiàn)

from typing import Annotated

from fastapi import Body, FastAPI
from pydantic import BaseModel, Field

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str | None = Field(
        default=None, title="The description of the item", max_length=300
    )
    # 跟Query比較相似,設(shè)置默認(rèn),title解釋,最大長(zhǎng)度300
    price: float = Field(gt=0, description="The price must be greater than zero")
    # price大于0,且是float形式
    tax: float | None = None


@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Annotated[Item, Body(embed=True)]):
    results = {"item_id": item_id, "item": item}
    return results

1.4 響應(yīng)模型response_model

參考:https://fastapi.tiangolo.com/zh/tutorial/response-model/

from typing import Any

from fastapi import FastAPI
from pydantic import BaseModel, EmailStr

app = FastAPI()


class UserIn(BaseModel):
    username: str
    password: str
    email: EmailStr
    full_name: str | None = None


class UserOut(BaseModel):
    username: str
    email: EmailStr
    full_name: str | None = None


@app.post("/user/", response_model=UserOut)
async def create_user(user: UserIn) -> Any:
    return user

response_model是控制輸出的內(nèi)容,按照規(guī)定的格式輸出,作用概括為:

  • 將輸出數(shù)據(jù)轉(zhuǎn)換為其聲明的類型。
  • 校驗(yàn)數(shù)據(jù)。
  • 在 OpenAPI 的路徑操作中為響應(yīng)添加一個(gè) JSON Schema。
  • 并在自動(dòng)生成文檔系統(tǒng)中使用。

1.5 請(qǐng)求文件UploadFile

https://fastapi.tiangolo.com/zh/tutorial/request-files/

from fastapi import FastAPI, File, UploadFile

app = FastAPI()


@app.post("/files/")
async def create_file(file: bytes = File()):
    return {"file_size": len(file)}


@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
    return {"filename": file.filename}

UploadFile 與 bytes 相比有更多優(yōu)勢(shì):

  • 這種方式更適于處理圖像、視頻、二進(jìn)制文件等大型文件,好處是不會(huì)占用所有內(nèi)存;
  • 可獲取上傳文件的元數(shù)據(jù);

1.6 CORS(跨域資源共享)

https://fastapi.tiangolo.com/zh/tutorial/cors/

你可以在 FastAPI 應(yīng)用中使用 CORSMiddleware 來(lái)配置它。

  • 導(dǎo)入 CORSMiddleware。
  • 創(chuàng)建一個(gè)允許的源列表(由字符串組成)。
  • 將其作為「中間件」添加到你的 FastAPI 應(yīng)用中。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

origins = [
    "http://localhost.tiangolo.com",
    "https://localhost.tiangolo.com",
    "http://localhost",
    "http://localhost:8080",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


@app.get("/")
async def main():
    return {"message": "Hello World"}
  • allow_origins - 一個(gè)允許跨域請(qǐng)求的源列表。例如 [‘https://example.org’, ‘https://www.example.org’]。你可以使用 [‘*’] 允許任何源。

1.7 與SQL 通信

https://fastapi.tiangolo.com/zh/tutorial/sql-databases/

FastAPI可與任何數(shù)據(jù)庫(kù)在任何樣式的庫(kù)中一起與 數(shù)據(jù)庫(kù)進(jìn)行通信。

1.8 JSONResponse 自定義返回

JSONResponse 可以設(shè)定回復(fù)內(nèi)容,JSONResponse可傳參數(shù):

  • content: 響應(yīng)body內(nèi)容,str 或者 bytes.
  • status_code: 響應(yīng)狀態(tài)碼,int類型,默認(rèn)200.
  • headers: 響應(yīng)頭部,dict類型.
  • media_type:media type. 例如"text/html".
  • background:后臺(tái)任務(wù)
import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/")
def root():
    return JSONResponse({"status":200}, status_code=405)


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

同時(shí)可以請(qǐng)求得到:

import requests

url = "http://127.0.0.1:8080"
response = requests.get(url)
response.json()

>>>  {'status': 200}

筆者其實(shí)對(duì)這個(gè)status_code比較好奇,在內(nèi)容反饋中,不會(huì)返回,而是通過(guò)curl請(qǐng)求得到的網(wǎng)頁(yè)狀態(tài)碼:

HTTP/1.1 405 OK
date: Tue, 18 Jul 2023 10:50:41 GMT
server: uvicorn
content-length: 36
content-type: application/json
 
 {'status': 200}

1.9 router用法

參考:FastAPI APIRouter 的用法教程:深入解析使用

復(fù)雜開(kāi)發(fā)中,讓分支更加清晰可以使用router

@router.put(
prefix="/items",
    tags=["custom"],
    responses={403: {"description": "Operation forbidden"}},
)

一些參入?yún)?shù):

  • prefix 參數(shù),路由的前綴
  • tags 將應(yīng)用于特定路徑操作的內(nèi)容
  • responses 指特定于該路徑下的響應(yīng)內(nèi)容,如上述便指定 404 的返回信息

請(qǐng)求的時(shí)候就是:0.0.0.0/items進(jìn)行請(qǐng)求

來(lái)看一個(gè)例子,此處將三個(gè)文件進(jìn)行代碼統(tǒng)一放置:

# 路由器1.py
from fastapi import FastAPI, APIRouter
router = APIRouter()
@router.get("/")
async def hello():
    return {"message": "Hello, FastAPI!"}


# 路由器2.py
from fastapi import FastAPI, APIRouter
router = APIRouter()
@router.get("/")
async def sayhi():
    return {"message": "Hello, FastAPI!"}

# 二合一.py
from fastapi import FastAPI, APIRouter
from 路由器1.py import router as r1
from 路由器2.py import router as r2

app = FastAPI()
app.include_router(r1, prefix='/xxx', tags=['模塊一'])
app.include_router(r2, prefix='/xxx', tags=['模塊二'])

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



3 報(bào)錯(cuò)修復(fù)記錄

3.1 RuntimeError: asyncio.run() cannot be called from a running event loop

在jupyter notebook中運(yùn)行下述代碼就會(huì)出現(xiàn)上述報(bào)錯(cuò)

import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/")
def root():
    return JSONResponse({"status":200}, status_code=405)


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

>>> RuntimeError: asyncio.run() cannot be called from a running event loop

這是jupyter notebook特有的,需要留意不要使用jupyter文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-653557.html

到了這里,關(guān)于FastAPI 構(gòu)建 API 高性能的 web 框架(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Docker與Go:構(gòu)建高性能的Go應(yīng)用

    Docker是一種開(kāi)源的應(yīng)用容器引擎,它使用一種名為容器的虛擬化方法來(lái)隔離軟件應(yīng)用的運(yùn)行環(huán)境。Docker使得開(kāi)發(fā)人員可以在任何地方運(yùn)行他們的應(yīng)用,無(wú)論是在本地開(kāi)發(fā)環(huán)境還是生產(chǎn)環(huán)境。Go是一種靜態(tài)類型、編譯式、高性能的編程語(yǔ)言,它的設(shè)計(jì)目標(biāo)是簡(jiǎn)單且高效。 在本文

    2024年02月19日
    瀏覽(100)
  • Nginx搭配負(fù)載均衡和動(dòng)靜分離:構(gòu)建高性能Web應(yīng)用的完美組合

    Nginx搭配負(fù)載均衡和動(dòng)靜分離:構(gòu)建高性能Web應(yīng)用的完美組合

    目錄 前言 一、Nginx簡(jiǎn)介 1.Nginx是什么 2.Nginx的特點(diǎn) 3.Nginx在哪使用 4.如何使用Nginx 5.Nginx的優(yōu)缺點(diǎn) 6.Nginx的應(yīng)用場(chǎng)景 二、負(fù)載均衡和動(dòng)靜分離 1.負(fù)載均衡 2.動(dòng)靜分離 三、Nginx搭載負(fù)載均衡并提供前后端分離后臺(tái)接口數(shù)據(jù) 1.Nginx安裝 2.tomcat負(fù)載均衡 3.負(fù)載均衡后臺(tái)項(xiàng)目發(fā)布 四、前

    2024年02月06日
    瀏覽(26)
  • c++高性能web框架drogon入門教程四,orm使用,csp使用

    2020年11月26日13:57:48 c++高性能web框架drogon入門教程一 linux環(huán)境搭建和demo運(yùn)行 c++高性能web框架drogon入門教程二 windows10下安裝drogon,配合vscoede搭建開(kāi)發(fā)環(huán)境 c++高性能web框架drogon入門教程三 控制器和數(shù)據(jù)庫(kù)客戶端使用 c++高性能web框架drogon入門教程四 orm使用,csp使用 c++高性能web框

    2023年04月08日
    瀏覽(28)
  • FastAPI + NGINX + Gunicorn:一步一步教你部署一個(gè)高性能的Python網(wǎng)頁(yè)應(yīng)用

    FastAPI + NGINX + Gunicorn:一步一步教你部署一個(gè)高性能的Python網(wǎng)頁(yè)應(yīng)用

    部署一個(gè) FastAPI 應(yīng)用到你的服務(wù)器是一項(xiàng)復(fù)雜的任務(wù)。如果你對(duì) NGINX 、 Gunicorn 和 Uvicorn 這些技術(shù)不熟悉,可能會(huì)浪費(fèi)大量的時(shí)間。如果你是剛接觸 Python 語(yǔ)言不久或者希望利用 Python 構(gòu)建自己的Web應(yīng)用程序,本文的內(nèi)容可能會(huì)讓你第一次部署時(shí)更節(jié)省時(shí)間。 FastAPI 是用于開(kāi)發(fā)

    2024年02月05日
    瀏覽(24)
  • 企業(yè)如何構(gòu)建高性能計(jì)算云?

    企業(yè)如何構(gòu)建高性能計(jì)算云?

    HPC是推動(dòng)科學(xué)和工程應(yīng)用發(fā)展的重要組成部分。除了將處理器向Exascale邁進(jìn)之外,工作負(fù)載的性質(zhì)也在不斷變化—從傳統(tǒng)的模擬和建模到混合工作負(fù)載,包括企業(yè)內(nèi)部和云應(yīng)用,還需要整合、吸收和分析來(lái)自無(wú)數(shù)物聯(lián)網(wǎng)傳感器的數(shù)據(jù)。同時(shí),隨著HPC基礎(chǔ)設(shè)施上的人工智能工作

    2024年02月03日
    瀏覽(25)
  • 第7章 高性能門戶首頁(yè)構(gòu)建

    高性能門戶建設(shè) 1、了解文件存儲(chǔ)系統(tǒng)的概念 2、了解常用文件服務(wù)器的區(qū)別 3、掌握Minio的應(yīng)用 1、OpenResty 百萬(wàn)并發(fā)站點(diǎn)架構(gòu) OpenResty 特性介紹 搭建OpenResty Web站點(diǎn)動(dòng)靜分離方案剖析 2、多級(jí)緩存架構(gòu)實(shí)戰(zhàn) 多級(jí)緩存架構(gòu)分析 Lua語(yǔ)法學(xué)習(xí) Lua操作Redis實(shí)戰(zhàn) 首頁(yè)高效加載實(shí)戰(zhàn) 3、Ng

    2024年02月11日
    瀏覽(24)
  • 【Linux高性能服務(wù)器編程】——高性能服務(wù)器框架

    【Linux高性能服務(wù)器編程】——高性能服務(wù)器框架

    ? hello !大家好呀! 歡迎大家來(lái)到我的Linux高性能服務(wù)器編程系列之高性能服務(wù)器框架介紹,在這篇文章中, 你將會(huì)學(xué)習(xí)到高效的創(chuàng)建自己的高性能服務(wù)器,并且我會(huì)給出源碼進(jìn)行剖析,以及手繪UML圖來(lái)幫助大家來(lái)理解,希望能讓大家更能了解網(wǎng)絡(luò)編程技術(shù)?。。?希望這篇

    2024年04月25日
    瀏覽(101)
  • 高性能API網(wǎng)關(guān)Kong介紹

    高性能API網(wǎng)關(guān)Kong介紹

    本文:高性能、API網(wǎng)關(guān)、Kong、微服務(wù) ??????? ????????API網(wǎng)關(guān)是隨著微服務(wù)(Microservice)概念興起的一種架構(gòu)模式。原本一個(gè)龐大的單體應(yīng)用(All in one)業(yè)務(wù)系統(tǒng)被拆分成許多微服務(wù)(Microservice)系統(tǒng)進(jìn)行獨(dú)立的維護(hù)和部署,服務(wù)拆分帶來(lái)的變化是API的規(guī)

    2024年02月03日
    瀏覽(22)
  • 構(gòu)建三高架構(gòu):高性能、高可用、高可擴(kuò)展

    在當(dāng)今計(jì)算機(jī)科學(xué)領(lǐng)域,構(gòu)建強(qiáng)大、高效的系統(tǒng)已成為迫切需求。為了應(yīng)對(duì)用戶需求的不斷增加,三高架構(gòu)應(yīng)運(yùn)而生,包括高性能、高可用性和高可擴(kuò)展性。本文將深入探討這三個(gè)關(guān)鍵特性,并提供基于 Java 的代碼示例來(lái)說(shuō)明這些概念的實(shí)際應(yīng)用。 1.1 優(yōu)化的系統(tǒng)設(shè)計(jì) 在構(gòu)建

    2024年01月25日
    瀏覽(29)
  • 高性能RPC框架解密

    高性能RPC框架解密

    專欄集錦,大佬們可以收藏以備不時(shí)之需: Spring Cloud 專欄: Python 專欄: Redis 專欄: TensorFlow 專欄: Logback 專欄: 量子計(jì)算: 量子計(jì)算 | 解密著名量子算法Shor算法和Grover算法 AI機(jī)器學(xué)習(xí)實(shí)戰(zhàn): AI機(jī)器學(xué)習(xí)實(shí)戰(zhàn) | 使用 Python 和 scikit-learn 庫(kù)進(jìn)行情感分析 AI機(jī)器學(xué)習(xí) | 基于lib

    2024年01月17日
    瀏覽(40)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包