fastapi中實現多個路由請求

大家伙,我是雄雄,歡迎關注微信公眾號:雄雄的小課堂。

前言

最近在寫機器人相關的接口,順手學了學python,發現這是個好東西,寫代碼效率比java要高很多,比如寫個詞云呀,寫個回調呀,或者寫個數據分析等等,都很方便。

今天,順便在此記錄一下,在使用fastapi的時候,創建多個文件,多個路由的問題。

一、創建新類api_sys.py

比如,我們這個類,就是一個嶄新的路由,我們調用該類中的接口時,路由地址為:你的ip/路由/接口名,那么,我們來看看如何實現。

# 引入依賴
from fastapi import APIRouterrouter = APIRouter()## 創建類,接收接口傳遞的json數據
class WechatDto(BaseModel):msg: str = None  # 消息內容tag: int = None  # 消息類型,例如:0表示發送文字,1表示發送圖片等finalFromWxid: str = None  # 如果是群消息,發送消息的人的微信IDfinalFromNick: str = None  # 如果是群消息,發送消息的人的微信IDfromWxid: str = None  # 發送消息的人的微信ID,如果是好友則為好友的wxidfromNick: str = None  # 發送消息的人的昵稱,如果是好友則為好友的昵稱memberCount: int = None  # 如果是群消息,群成員的數量;如果是好友消息則為空time: str = None  # 發送時間msgSource: int = None  # 發送消息的來源,0表示別人發送,1表示自己發送atList: list = []  # 艾特的人列表,通常是一個包含微信ID的列表# 創建get方法def get(self, param):return getattr(self, param)# 微信機器人自定義接口
@router.post("/receive_message")
def receive_message(wechat: WechatDto):# 獲取消息msg = wechat.msg# 獲取用戶finalFromWxid = wechat.finalFromWxid# 獲取需要發送的群fromWxid = wechat.fromWxidfinalFromNick = wechat.finalFromNickuser_nick_list = [finalFromNick]user_name_list = [finalFromWxid]result = ''if msg.find("小助手") != -1:result = jiadian(msg, fromWxid, user_nick_list, user_name_list)return result

注意,關鍵代碼就這幾行:

from fastapi import APIRouter
router = APIRouter()
@router.post("/receive_message")

然后,我們在main.py中引入這個路由類:


from fastapi import FastAPI
# 導入依賴
from api.api_sys import router as api_sys_routerapp = FastAPI()
# 添加前綴,例如
app.include_router(api_sys_router, prefix="/api")

其余就是你別的代碼了,接下來,我們可以使用apipost來調用一下該接口,調用地址為:127.0.0.1:7552/api/receive_message,然后再body中該怎么傳參就怎么傳參,我這邊傳參是個json,就不在這里展示了。

創建第二個類api_huidiao.py

為了給大家能夠跟清晰的展示,多個路由的概念,我們可以再創建一個類,繼續當做一個路由,走走流程:


from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import Optional, List
from fastapi import APIRouterapp = FastAPI()huidiao_router = APIRouter()class CallBackDataEntity(BaseModel):port: Optional[int] = Nonepid: Optional[int] = Nonewxid: Optional[str] = NonewxNum: Optional[str] = Nonenick: Optional[str] = Nonedevice: Optional[str] = Nonephone: Optional[str] = NoneavatarUrl: Optional[str] = Nonecountry: Optional[str] = Noneprovince: Optional[str] = Nonecity: Optional[str] = Noneemail: Optional[str] = Noneqq: Optional[str] = NonetimeStamp: intfromType: intmsgType: intmsgSource: intfromWxid: strfromNick: strfinalFromWxid: Optional[str] = NonefinalFromNick: Optional[str] = NoneatWidList: Optional[List[str]] = Nonesilence: intmembercount: intsignature: Optional[str] = Nonemsg: str@huidiao_router.post("/receive_message_huidiao")
async def receive_message(data: CallBackDataEntity):print(f"接收到了回調消息,內容是:{data.dict()}")# 這里可以添加你的業務邏輯return {"message": "success"}@huidiao_router.get("/test_api")
async def test_api():return {"message": "success"}

關鍵代碼,還是那幾行,只是名字有所不一樣:


from fastapi import APIRouter
huidiao_router = APIRouter()
@huidiao_router.post("/receive_message_huidiao")

下面是在main.py中新增的代碼:


from api.api_huidiao import huidiao_router as huidiao_routerapp.include_router(huidiao_router, prefix="/api/huidiao")

接下來我們請求接口:http://127.0.0.1:7582/api/huidiao/test_api,即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15411.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15411.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15411.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

隨手筆記4

1、https://www.pgyer.com/app/distribution 蒲公英 移動發布二維碼

gRPC和ProtoBuf

gRPC介紹 gRPC是一個高性能、開源且通用的RPC框架,它基于HTTP/2標準協議和Protocol Buffers進行數據序列化,支持多種編程語言。 rpc和http區別 傳輸協議:RPC可以基于TCP或HTTP協議,而HTTP服務則工作在HTTP協議之上。效率和性能…

android 問題記錄:gradle.kts文件引入本地jar包

在build.gradle文件中引入本地的jar文件,可以使用files方法來添加本地的jar文件到項目的依賴中。在build.gradle引入jar包我們都很熟悉了,具體代碼如下 implementation files(libs/test.jar)// 或者 compile files(libs/test.jar) 但是這種寫法目前在kt…

kafka 消費模式基礎架構

kafka 消費模式 &基礎架構 目錄概述需求: 設計思路實現思路分析1.kafka 消費模式基礎架構基礎架構2: 參考資料和推薦閱讀 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,…

mainwindow.ui和mainwindow.h和ui_mainwindow.h這幾個文件之間的聯系是什么

在Qt應用程序開發中,mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 這三個文件之間有著緊密的聯系,共同構成了使用Qt Designer設計的圖形用戶界面(GUI)應用程序的基礎。下面是這三個文件各自的作用及它們之間的關聯&#xff1…

HTML5 文件處理及應用

HTML5 文件處理及應用 目錄 核心對象文件信息讀取文件拖放FileReaderSyncFileWriter APIBlob URL與 revokeObjectURL()跨源資源共享 (CORS)HTML5文件File API為瀏覽器提供了與用戶計算機上的文件進行交互的能力,使得Web應用程序能夠在客戶端直接處理文件數據,而無需依賴服務…

Golang:使用jszwec/csvutil讀取csv文件

jszwec/csvutil 高性能、慣用的CSV記錄編碼和解碼到本機Go結構 文檔 https://github.com/jszwec/csvutil 安裝 go get github.com/jszwec/csvutil要讀取的文件 user.csv name,age,CreatedAt jacek,26,2012-04-01T15:00:00Z john,,2001-01-01T00:00:00Z讀取示例 package m…

93.網絡游戲逆向分析與漏洞攻防-游戲技能系統分析-增強技能信息顯示后進行分析

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 如果看不懂、不知道現在做的什么,那就跟著做完看效果,代碼看不懂是正常的,只要會抄就行,抄著抄著就能懂了 內容…

Ant Design Vue中 a-table 嵌套子表格

需求:在父表格中嵌套子表格,當點擊展開某一行時,有展開的關閉當前展開行。使用a-table中的expandedRowKeys 屬性和expand 方法。鏈接:Ant Design Vue 一、屬性說明: expandedRowKeys:這個主要是控制展開某行…

都2024年了!是誰還不會優化 Hive 的小文件啊!!!速看!

文章目錄 小文件產生的原因1.查詢建表或者插入2.裝載數據3.動態分區小文件影響解決方法針對已經存在的小文件進行優化1.小文件歸檔2.getmerge3.concatenate4.重寫針對寫入數據時的優化1.調參優化2.動態分區優化3.使用 Spark 算子控制小文件數量查看 HDFS 上的文件時,無意間點進…

【QT+VS】如何在現有VS項目中添加Qt界面?【全網最詳細】

0. 前置步驟 參考如下鏈接文章中的 前3個步驟(1:下載Qt;2:安裝Qt;3:安裝Qt插件),完成環境的配置和安裝。 深耕AI:如何聯合Qt,VS,C++,來開發一個電腦版軟件(簡單有趣,詳細) 本文的基礎項目鏈接為: c++工程+圖像分割預測+mmdet+實例分割+最新工程+簡潔易懂+新手…

搭建自己的視頻通話服務器Janus(WebRTC)

1. 安裝janus apt install janus 高版本的Ubuntu已經可以直接安裝了,不要編譯那么麻煩了 2. 安裝nginx janus 是后端,需要nginx或者其他等提供前端頁面的服務器,此外因為這里并沒有正式的證書,只能用自簽名的證書用于https。 …

Mac 更改登陸密碼,不是appleid 密碼

在Mac 上更改登錄密碼 在Mac 上,選取蘋果菜單 >“系統設置”,然后點按邊欄中的“用戶與群組” 。 … 點按右側用戶名旁邊的“簡介”按鈕 。 點按“更改”。 在“舊密碼”欄輸入你的當前密碼。 在“新密碼”欄中輸入新密碼,然后在“確認密碼…

「數據結構」隊列

目錄 隊列的基本概念 隊列的實現 頭文件queue.h 實現函數接口 1.初始化和銷毀 2.出隊列和入隊列 3.獲取隊頭元素和隊尾元素 4.隊列長度判空 后記 前言 歡迎大家來到小鷗的博客~ 個人主頁:海盜貓鷗 本篇專題:數據結構 多謝大家的支持啦&#xff…

Java入門基礎學習筆記36——面向對象基礎

面向對象編程快速入門: 計算機是用來處理數據的。 單個變量 數組變量 對象數據 Student類: package cn.ensource.object;public class Student {String name;double chinese_score;double math_score;public void printTotalScore() {System.out.pr…

【哈希】Leetcode 219. 存在重復元素 II【簡單】

存在重復元素 II 給你一個整數數組 nums 和一個整數 k &#xff0c;判斷數組中是否存在兩個 不同的索引 i 和 j &#xff0c;滿足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 示例 1&#xff1a; 輸…

偏微分方程算法之橢圓型雙調和方程問題

目錄 一、研究對象 二、問題解析 一、研究對象 針對雙調和方程的邊值問題:

達夢數據庫使用dmlcvt命令找回更改前的數據

在生產系統上不小心修改了表數據后最快的方法是用閃回查詢找回。但時間不能超過undo_retention&#xff08;默認90秒&#xff09;。其實最標準的處理方法是在其他機器上將數據庫恢復到修改前的時刻。但數據庫比較大時恢復時間較長。真實場景可能比較急。那么也可以分析歸檔日志…

數組序號Spinner

使用Spnner代替編輯框&#xff0c;只能選擇已有的&#xff0c;不會越界&#xff0c;大大簡化了代碼。 String[] SA new String[list.size()]; for (int i0; i<SA.length; i) {SA[i] String.valueOf(i); } ArrayAdapter<String> adapter1 new ArrayAdapter<>(…

[國產大模型簡單使用介紹] 開源與免費API

個人博客:Sekyoro的博客小屋 個人網站:Proanimer的個人網站 隨著大模型技術蓬勃發展和開源社區越來越活躍,國內的大模型也如雨后春筍一般.這時,一些就會問了,有了llama3,Mistral還有Gemma等等,國外大廠接連發力,一些開源社區也會有一些不錯的模型,國內怎么比?對一個人使用,oll…