😎
FastAPIでアプリを起動する
やること
FastAPIでアプリを起動してみる
前提
以前こんな記事を書きました。
その後アプリ開発から遠ざかっていたのですが、改めてバックエンドのキャッチアップをしていきたいということで、以前の記事で扱った書籍をFastAPIで実装していきたいと思います。ディレクトリ構成
一旦のゴールはデータベースを利用したアプリを作るところなんですが、今回の記事で作るのは以下の部分になります。
fastapi/
└── apps/
├── app.py # メインのFastAPIアプリケーション
├── crud/
├── views.py # CRUDエンドポイント
├── templates/
└── crud/
└── index.html # テンプレートファイル
└── static/
├── style.css # 静的ファイル
依存ライブラリ
pip install fastapi uvicorn
Flaskとの違い
実装面でFlaskと異なるのはエンドポイントを作成する部分になります。Flaskではアプリを分割するのにBlueprintを使いますが、FastAPIでは以下の流れとなります。
① APIRouterインスタンスを作成し、Jinja2テンプレートを設定する
② エンドポイントを作成し、テンプレートを返す
③ アプリにAPIRouterを登録する
①、②の流れを踏まえviews.pyは以下のようになります。
views.py
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
# APIRouterインスタンスを作成
router = APIRouter()
# Jinja2テンプレートを設定
templates = Jinja2Templates(directory="apps/crud/templates/crud")
# ルートを定義
@router.get("/", response_class=HTMLResponse)
async def index(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
③にあるようにapp.pyにAPIRouterを登録します。
app.py
from fastapi import FastAPI
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from apps.crud.views import router as crud_router
# FastAPIアプリを作成するためのcreate_app関数
def create_app():
# FastAPIインスタンスを生成
app = FastAPI()
# CRUDルーターを登録
app.include_router(crud_router, prefix="/crud")
# 静的ファイルをマウント
app.mount("/static", StaticFiles(directory="apps/crud/static"), name="static")
return app
app = create_app()
動作確認
以下のコマンドを実行します。
uvicorn apps.app:app --reload
Swagger UIでドキュメントを確認してみましょう。
コメントなど
とりあえずアプリを起動することができました!次はSQLAlchemyを使ってデータベースを操作していきたいと思います。
Discussion