1. HOME
  2. ブログ
  3. IT技術
  4. 【第4回】Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみる【モデルの構築】

【第4回】Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみる【モデルの構築】

第4回~モダンなフレームワークの使い方を学びながらブログシステムを構築~

連載「Python Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみる」第4回目です。

前回は、「管理者ページの整備」まで行いました。

今回は、「ブログシステムのデータベース」を解説していきます。

ブログシステムのデータベースを作ろう!

今回は、いよいよ Firestore を使って、「ブログシステムのデータベース」を作ります。

以下のポイントを押さえながら解説していきます。

  1. Firestore と Python の連携はどうやるの?
  2. ブログシステムには何が必要?

それでは、さっそく見ていきましょう!

こちらの記事もオススメ!

モデルの作成

まずはモデルを扱う、 models.py を作成しましょう。

ここで、「記事」や「カテゴリ」といったモデルを作成し、「Firestore に追加していく機能」を実装していきます。

実際には「コントローラ側で、モデルをもとにデータを作成する」形になります。

まずは、試しに作ってみましょう。

Category

まずは、「カテゴリのモデル」作成から。

カテゴリは、以下の要素で構成されます。

  1. 主キーとなる ID
  2. 名前
  3. スラッグ

Firestore と Python の連携はどうやる?

Firestore と Python の連携は、一般的に「構築したクラスを Dict に変換して追加」という方法で行います。

したがって、この様な実装をしてみました。

ID の設定

ID は、動的に被りがない様にしましょう。

Cloud Firestore は、データを追加する際、「指定しなければ、ランダムに ID を割り当ててくれる」ので、これを使います。

スラッグの設定

また、ID 同様、スラッグも被りがない様にします。

以下のように、「Firestore 内データのスラッグ一覧を取得する関数」を用意しておきます。

コレクションから stream() で得たデータは、そのままでは使い勝手が悪いです。

そのため、「辞書型変数」に直してから、スラッグだけのリストを作りましょう!

Tag

タグも同様です。

Article

記事は、以下のフィールドを持たせます。

id一位に定まるキー
title記事タイトル
thumbnailサムネイル画像
contents記事内容
description詳細・記事抜粋
author著者
slugスラッグ (これも一意に定まるもの)
categoryカテゴリ (1つ)
tagsタグ (複数個可)
released公開状態

今回、「カテゴリは1つ」「タグは複数個」持てるようにします。

その他は、先ほどの2つと大きな違いはありません。

サンプルデータを追加してみる

それでは、動作確認がてらデータを追加してみましょう!

マークダウン形式で書いておこう

執筆はマークダウン形式にしたいので、ここでも、マークダウン形式で記事内容を書いておきます。

今は、とりあえず適当なデータを格納しておきましょう。

実行!

実行してみると、以下の様にデータが追加されました!

データが追加できた

管理者ページに反映させる

これで、データベースに記事ができました。

次は、「管理者ページ」もとい「投稿一覧ページ」に、反映させましょう。

関数を作成

まずは、 models.py に、記事を List[Dict] で取得できる関数を作っておきます。

諸々の仕様を設定

あとで使い回せるよう、公開済みか否か」によって、取得する記事を変更する様にしました。

また、 order_by('last_update', direction=Query.DESCENDING) で日付降順で取り出すようにしています。

ビューに投げる処理を追記

そうしたら、 controllers.py 側からこれを呼び出し、ビューに投げる処理を追記します。

ビューを変更

最後に、ビューも変更しましょう。

ポイントは、以下の3つです。

  1. 公開済みの記事に直接飛べるようにする
  2. サイドメニューに「カテゴリ」と「タグ」の編集リンクを追加(後ほど実装します)
  3. テーブルのヘッダーに「公開」を追加

確認

実際に、管理者ページにアクセスしてみると、

管理者ページにデータが反映された

うまく動作しています!

第5回へつづく!

今回は、データベースにおける「Firestore と Python の連携部分」を実装してみました。

管理者ページもだいぶ整いましたが、「記事の追加」「編集」などの実装はまだです。

まだまだブログシステム完全構築には程遠いですね…。

次回は「記事個別ページ」を作成していきます。

道のりは長いですが、次回も頑張って実装していきましょう!

(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
Responder + Firestoreでの開発依頼・お見積もりはこちらまでお願いします。
また、ResponderやFirestoreを扱えるエンジニアを積極採用中です!詳しくはこちらをご覧ください。

※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

次回の記事はこちら

第1回はこちら

こちらの記事もオススメ!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事