FastAPI 項目結構組織,工廠模式創建


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

組織代碼,寫博客不易,導流希望能理解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM