中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么利用 FastAPI構建一個Web服務

發布時間:2021-07-10 16:14:58 來源:億速云 閱讀:295 作者:Leah 欄目:編程語言

Python中怎么利用 FastAPI構建一個Web服務,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

起步

我們將使用 Fedora 作為基礎鏡像來搭建開發環境,并使用 Dockerfile 為鏡像注入 FastAPI、Uvicorn 和 aiofiles 這幾個包。

FROM fedora:32RUN dnf install -y python-pip \    && dnf clean all \    && pip install fastapi uvicorn aiofilesWORKDIR /srvCMD ["uvicorn", "main:app", "--reload"]

在工作目錄下保存 Dockerfile 之后,執行 podman 命令構建容器鏡像。

$ podman build -t fastapi .$ podman imagesREPOSITORY TAG IMAGE ID CREATED SIZElocalhost/fastapi latest 01e974cabe8b 18 seconds ago 326 MB

下面我們可以開始創建一個簡單的 FastAPI 應用程序,并通過容器鏡像運行。

from fastapi import FastAPI app = FastAPI() @app.get("/")async def root():    return {"message": "Hello Fedora Magazine!"}

將上面的代碼保存到 main.py 文件中,然后執行以下命令開始運行:

$ podman run --rm -v $PWD:/srv:z -p 8000:8000 --name fastapi -d fastapi$ curl http://127.0.0.1:8000{"message":"Hello Fedora Magazine!"

這樣,一個基于 FastAPI 的 Web 服務就跑起來了。由于指定了 --reload 參數,一旦 main.py 文件發生了改變,整個應用都會自動重新加載。你可以嘗試將返回信息 "Hello Fedora Magazine!" 修改為其它內容,然后觀察效果。

可以使用以下命令停止應用程序:

$ podman stop fastapi

構建一個小型 Web 服務

接下來我們會構建一個需要 I/O 操作的應用程序,通過這個應用程序,我們可以看到 FastAPI 自身的特點,以及它在性能上有什么優勢(可以在這里參考 FastAPI 和其它 Python Web 框架的對比)。為簡單起見,我們直接使用 dnf history 命令的輸出來作為這個應用程序使用的數據。

首先將 dnf history 命令的輸出保存到文件。

$ dnf history | tail --lines=+3 > history.txt

在上面的命令中,我們使用 tail 去除了 dnf history 輸出內容中無用的表頭信息。剩余的每一條 dnf 事務都包括了以下信息:

  • id:事務編號(每次運行一條新事務時該編號都會遞增)

  • command:事務中運行的 dnf 命令

  • date:執行事務的日期和時間

然后修改 main.py 文件將相關的數據結構添加進去。

from fastapi import FastAPIfrom pydantic import BaseModel app = FastAPI() class DnfTransaction(BaseModel):    id: int    command: str    date: str

FastAPI 自帶的 pydantic 庫讓你可以輕松定義一個數據類,其中的類型注釋對數據的驗證也提供了方便。

再增加一個函數,用于從 history.txt 文件中讀取數據。

import aiofiles from fastapi import FastAPIfrom pydantic import BaseModel app = FastAPI() class DnfTransaction(BaseModel):    id: int    command: str    date: str  async def read_history():    transactions = []    async with aiofiles.open("history.txt") as f:        async for line in f:            transactions.append(DnfTransaction(                id=line.split("|")[0].strip(" "),                command=line.split("|")[1].strip(" "),                date=line.split("|")[2].strip(" ")))    return transactions

這個函數中使用了 aiofiles 庫,這個庫提供了一個異步 API 來處理 Python 中的文件,因此打開文件或讀取文件的時候不會阻塞其它對服務器的請求。

最后,修改 root 函數,讓它返回事務列表中的數據。

@app.get("/")async def read_root():    return await read_history()

執行以下命令就可以看到應用程序的輸出內容了。

$ curl http://127.0.0.1:8000 | python -m json.tool[{"id": 103,"command": "update","date": "2020-05-25 08:35"},{"id": 102,"command": "update","date": "2020-05-23 15:46"},{"id": 101,"command": "update","date": "2020-05-22 11:32"},....]

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

密云县| 高清| 大邑县| 女性| 北川| 资源县| 通州市| 喀什市| 嘉禾县| 内丘县| 邛崃市| 洛浦县| 漳平市| 哈巴河县| 义马市| 凤山市| 白城市| 马边| 长宁区| 石门县| 沁阳市| 米易县| 南澳县| 临湘市| 莲花县| 静安区| 五寨县| 阿拉尔市| 南郑县| 西城区| 乌苏市| 云南省| 方城县| 开鲁县| 永仁县| 长乐市| 大同县| 兴宁市| 永宁县| 武平县| 普定县|