以前の記事で、ブログに全文検索機能を統合し、素晴らしいコンテンツを見つけやすくしました。
これで、ブログの機能が豊富になり、コンテンツが増えるにつれて、読者にとって最も人気のある記事はどれかという新しい疑問が自然に生じます。
読者の興味を理解することは、より質の高いコンテンツを作成するのに役立ちます。
そのため、このチュートリアルでは、ブログに基本的でありながら非常に重要な機能、訪問者トラッキングを追加します。各記事が読まれた回数を記録し、ページにビュー数を表示します。
Google Analyticsのようなサードパーティサービスの使用を検討できます。しかし、バックエンド駆動のトラッキングシステムを自分で構築することで、より多くのデータを自分たちの手に置き、収集したいデータをカスタマイズできます。
始めましょう。
ステップ1:ページビューのデータモデルを作成する
1. データベーステーブルの作成
このテーブルは、各ビューの時間、対応する投稿、および将来の詳細分析のための訪問者情報(IPアドレスやUser Agentなど)を記録します。以下のSQLステートメントをPostgreSQLデータベースで実行して、pageview
テーブルを作成します。
注意:ON DELETE CASCADE
は、投稿が削除されたときに、関連するすべてのページビューレコードも自動的にクリアされることを保証します。
Leapcellでデータベースが作成されている場合、

グラフィカルインターフェイスを使用してSQLステートメントを簡単に実行できます。ウェブサイトのデータベース管理ページに移動し、上記のステートメントをSQLインターフェイスに貼り付けて実行するだけです。

2. PageViewエンティティの作成
次に、models.py
ファイルを開き、PageView
モデルを追加し、双方向の関係を確立するためにPost
モデルを更新します。
main.py
でcreate_db_and_tables
関数を構成したため、SQLModelはモデルの変更を自動的に検出し、アプリケーション起動時にデータベーステーブル構造を更新します。そのため、SQLを手動で実行する必要はありません。
ステップ2:トラッキングサービスの K実装
コードをきれいに保つために、ページビューのトラッキング機能用の新しいサービスファイルを作成します。
ページビューに関連するすべてのロジックを処理するために、プロジェクトのルートディレクトリに新しいファイル tracking_service.py
を作成します。
get_counts_by_post_ids
メソッドは、SQLModel(SQLAlchemy)のfunc.count
とgroup_by
を使用して、効率的なGROUP BY
クエリを実行します。これは、特にホームページで複数の記事のビュー数を表示する必要がある場合、各投稿に対して個別のcount
クエリを実行するよりもはるかに高速です。
ステップ3:記事ページでのビュー記録の統合
次に、訪問者が投稿を表示するたびにtracking_service
のrecord_view
メソッドを呼び出す必要があります。これに最も適した場所は、routers/posts.py
のget_post_by_id
ルートです。
routers/posts.py
を開き、新しいサービスをインポートして呼び出します。
ステップ4:フロントエンドでのビュー数の表示
記事詳細ページ
前のステップで、view_count
を取得し、post.html
テンプレートに渡しました。あとはテンプレートに表示するだけです。
templates/post.html
を開き、投稿のメタ情報エリアにビュー数を追加します。
ブログホームページ
ホームページの投稿リストにもビュー数を表示するには、get_all_posts
ルートにいくつかの調整を加える必要があります。
routers/posts.py
を更新:
最後に、templates/index.html
テンプレートを更新してビュー数を表示します。
実行とテスト
アプリケーションを再起動します。
ブラウザを開き、ブログのホームページに移動します。
ブログリストで、各投稿の横に「Views: 0」が表示されます。

詳細ページに入る記事をクリックしてページを数回更新します。この記事のビュー数がそれに応じて増加していることに気づくでしょう。

結論
これで、FastAPIブログにバックエンドビューカウントトラッキングシステムを正常に追加しました。ユーザー訪問データは、これであなたの手元にあります。
この生データを使用して、より詳細なデータ操作と分析を実行できます。たとえば:
- 重複排除:特定の時間枠(例:1日)内の同じIPアドレスからの複数の訪問を1回のビューとしてカウントします。
- ボットのフィルタリング:
User-Agent
を分析して、検索エンジンのクローラーからの訪問を識別し、除外します。 - データダッシュボード:チャートを使用して記事のビュー傾向を視覚化するプライベートページを作成します。
データはあなたの手元にあるので、これらの探索はあなたに委ねます。
ブログがLeapcellにデプロイされている場合、LeapcellはすでにWeb Analytics機能を無料で自動的に有効にしています。
LeapcellのWeb Analyticsには、多くの便利で強力な訪問者分析機能が含まれています。それを使用すると、自分で開発する大変な作業なしに、訪問者の行動の基本的な分析を簡単に実行できます。

Xでフォローする:@LeapcellJP
関連記事: