大家伙,我是雄雄,歡迎關注微信公眾號:雄雄的小課堂。
前言
最近在寫機器人相關的接口,順手學了學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
,即可。