色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

使用Python FastAPI構建Web服務的實現

瀏覽:11日期:2022-07-22 11:04:23

FastAPI 是一個使用 Python 編寫的 Web 框架,還應用了 Python asyncio 庫中最新的優化。本文將會介紹如何搭建基于容器的開發環境,還會展示如何使用 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'},....]

總結

FastAPI 提供了一種使用 asyncio 構建 Web 服務的簡單方法,因此它在 Python Web 框架的生態中日趨流行。要了解 FastAPI 的更多信息,歡迎查閱 FastAPI 文檔。

本文中的代碼可以在 GitHub 上找到。

到此這篇關于使用Python FastAPI構建Web服務的實現的文章就介紹到這了,更多相關Python FastAPI構建Web服務內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产无卡一级毛片aaa | 久久思 | 午夜毛片免费观看视频 | 一级特级毛片 | 久久精品亚洲精品国产欧美 | 亚洲欧美一区二区三区综合 | aaa成人永久在线观看视频 | 亚洲综合在线观看视频 | 美女黄色在线 | 最近韩国日本免费免费版 | 一区二区三区国产精品 | 中文久草 | 精品久久中文网址 | 亚洲自拍偷拍网 | 亚洲国产成人久久三区 | 农村寡妇女人一级毛片 | 一区二区欧美视频 | 大陆60老妇xxxxhd | 美女的被男人桶爽网站 | 国产精品成人网 | 国产欧美一区二区三区沐欲 | 精品国产成人三级在线观看 | 免费又黄又爽又猛大片午夜 | 伊人久久91 | 国产免费播放一区二区 | 日韩中文字幕免费在线观看 | 手机在线一区二区三区 | 成年人黄视频在线观看 | 高清国产在线播放成人 | 久久不卡日韩美女 | 国产手机在线视频 | 亚洲作爱视频 | 国产高清自拍一区 | 日本久久草| 九九在线免费视频 | 久草在线影 | 俄罗斯黄色一级片 | 国产欧美在线不卡 | 91成人小视频 | 亚洲一区二区三区精品国产 | 国产原创系列在线 |