FastAPI 項目結構組織,工廠模式創建
前言
學習Vue的時候,需要接口,而我恰巧也學習了下FastAPI,正好個人項目,試一下這個FastAPI框架。
然而
現在關於FastAPI,搜索資料基本都是官網翻譯一下,要么就是官方推薦的
全棧項目生成
https://github.com/tiangolo/full-stack-fastapi-postgresql, 對我目前的需求而言,太大了,而且全程用docker,
對我這個初學FastAPI的新手來說很不友好。於是我自己花了點時間, 詳細看了一遍文檔。然后自己組織了一遍代碼。
項目大了之后,可參考項目生成的目錄結構
框架特點
按照國際慣例扯一下(復制一下)
算了,自己看官網把,FastAPI文檔,是我目前看起來寫得最漂亮
的,至少我喜歡那個文檔的UI, 還有Django文檔UI,再就是各種細節提醒,
從基礎到進階,拋開各種性能不說(我也沒測試,只是看別人寫的測試文章)。
自帶的Swagger交互文檔, 集成的pydantic數據驗證,用起來是真的香呀!
FastAPI 和 Flask Hello World 的對比
由於FastAPI官網的Demo看起來和Flask一樣,所以我就參考Flask創建項目。
- Flask Hello World 創建一個名字為
app.py
文件,寫入以下代碼
# flask 1.x版本 后支持默認返回json數據,不需要jsonify
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return {"Hello": "World"}
if __name__ == '__main__':
# Flask推薦命令行啟動 flask run
app.run(host="127.0.0.1", port=8090, debug=True)
- FastAPI Hello World 創建一個名字為
main.py
文件,注意名字為main,和啟動的名字相對應
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
if __name__ == "__main__":
import uvicorn
# 官方推薦是用命令后啟動 uvicorn main:app --host=127.0.0.1 --port=8010 --reload
uvicorn.run(app='main:app', host="127.0.0.1", port=8010, reload=True, debug=True)
FastAPI 工廠模式創建應用
首先就是項目組織結構, 直接上目錄結構
.
|_FastDemo // 主項目文件
|
|___api
| |_____init__.py // (重點)創建工廠模式生成app對象, 全局的操作基本在這里配置
| |____v1
| |____database.py // 數據庫對象
| |____schemas.py // 驗證參數 (可放到對應模塊內)
| |____models.py // models模型類型 (可放到對應模塊內)
| |____home // 項目模塊文件
| | |____home.py
| | |______init__.py
| | |____home_backup.py
| |____category
| | |______init__.py
| |______init__.py
| |____profile
| | |____profile.py
| | |______init__.py
| |____goods
| |____goods.py
| |____goods_backup.py
|____test // 測試用例
| |______init__.py
| |____test_sqlite.py
|____utils // 工具類
| |______init__.py
| |___custom_exc.py // 自定義異常
| |___response_code.py // 自定義返回的狀態碼
|____setting // 配置文件夾
| |______init__.py // 根據虛擬環境 導出不同配置
| |____development_config.py // 開發環境配置
| |____production_config.py // 生產環境配置
|____extensions // 擴展文件
| |______init__.py // 導出擴展文件
| |____logger.py // 日志配置
|____alembic // alembic 初始化自動生成的
| |____script.py.mako
| |____env.py
| |____versions
| |____README
|____alembic.ini // alembic 初始化自動生成的
|____.gitignore
|____requirements.text // 依賴文件
|____main.py // 項目啟動文件
|____mall_data.sql // mysql insert 數據
|____mall_table.sql // msyql表格
|____README.md
|____Pipfile
|____Pipfile.lock
主要在api/init.py文件下,生成FastAPI對象
# 導入對象
from fastapi import FastAPI, Request, status
from api.v1 import api_v1
def create_app():
app = FastAPI(
title="CharmCode.cn",
description="https://www.charmcode.cn",
version="0.1.1",
docs_url="/api/v1/docs", # 自定義文檔地址
openapi_url="/api/v1/openapi.json", #
redoc_url=None, # 禁用redoc文檔
)
# 導入路由, 前綴設置
app.include_router(
api_v1,
prefix="/api/v1/mall",
)
# 異常捕獲
register_exception(app)
# 跨域設置
register_cors(app)
return app
代碼github地址查看我個人博客:
https://www.charmcode.cn/article/2020-06-24_FastAPI_factory
組織代碼,寫博客不易,導流希望能理解。