技術は私たちの力。技術は私たちの楽しみ。 Creative Developer BLOG 技術部ブログ
Technology is our strength. Technology is what we enjoy.

djangoでCMS作ってみた

2025-04-25 

はじめに

大学生の頃、就活も兼ねてHTML,CSSのみの部活のHPを作りました。

学生という肩書が外れて早一年、自分の成長を見るために、弊社の使用言語:Perlにある程度近く人気のあるPythonでCMSを作ってみました。

Djangoとは?

DjangoはPythonのWebフレームワークの1つで、YoutubeやInstagramの一部にも使われている人気のフレームワークです。管理画面がデフォルトで搭載されてるなどCMSに適した特徴を持っています。

初期画面を出してみる。

早速、Django開発に移りたいと思います。
まずは、初期画面を出してみます。

環境構築

Dockerコンテナで開発を進めました。
requirementx.txtでdjangoをインストールして、コマンドで各種操作を行っていきます。

プロジェクトを開始する。

以下のコマンドを実行することで、Djangoプロジェクトに必要なファイルが自動で作成されます。
(開発途中で分かりづらくなるので、今回は、configというプロジェクト名にしました。)
django-admin startproject プロジェクト名
自動作成されたファイル↓

manage.pyの中身

このファイルのお陰でDjango特有のコマンドを実行できるようになります。
そのため多くのコマンドに「manage.py」が含まれています。
manage.py

サーバーを起動する

python manage.py runserver 0.0.0.0:8000
※コンテナで実行してるので、ホストマシンからアクセスするためにフリーポートを指定してます。

初期画面が表示されました!

英語版初期画面

ちなみに...①

言語はsettings.pyから簡単に変更できます。

この時点で管理画面が作成されてました。(驚き)

管理画面に入ってみる。

次に、管理画面に入ってみようと思います。
この時点ではユーザーがいないので、コマンドでユーザーを作成します。

管理者ユーザーを作成

python manage.py createsuperuser

作成したパスワードを入力。。

侵入成功!

HOME画面を作ってみる。

無事、管理画面に入ることができたので、サイトを作る下準備ができました。
それでは、任意のURL(localhost:8000)でHOME画面を表示してみたいと思います。

アプリの作成

djangoは一つの機能を「アプリケーション」という単位で扱います。
そこで、HOME画面用にhomeというアプリを作成します。
コマンドはこちら↓
python manage.py startapp home

自動でファイルが作成される↓

homeアプリをDjangoに認識させる

作成したアプリはsettings.pyのINSTALL_APPSに追加するだけで、使用することができます。

テンプレートディレクトリも認識させる

画面が表示される流れ

HTML

まずは、表示するHTMLを作成します。(templates/home/index.html)

views.py

リクエストに応じてHTMLテンプレートを動的に処理する記述はvews.pyに書きます。

urls.py

URLのルーティング処理は、2箇所のurls.pyで実装します。

①プロジェクトディレクトリのurls.pyで、homeのurls.pyを指定する。

これにより、localhost:8000 というリクエストが来ると、homeアプリのurls.pyを使用します。


②アプリのurls.pyでviews.pyを呼び出す。

アプリにはurls.pyが存在しないので、手動で作成する必要があります。
そちらに、vews.pyで作成したhome関数を指定することで、動的なHTMLを返すこと事ができます。

再度サーバーを起動させると…

python manage.py runserver 0.0.0.0:8000

表示成功!

ちなみに...②

テンプレートHTMLのテンプレート変数は、辞書型になっていて、どんどん追加することができます。(他にもいろいろな書き方はあると思いますが。)

管理画面から記事を投稿してみる。

基本的な流れがわかってきたところで、管理画面で作成した記事を投稿してみたいと思います!

DBテーブルの作成

djangoではクエリを使用することなく、テーブルの作成・操作ができます。(ORM)

テーブル構造の作成

models.pyでテーブル構造の指定します。

マイグレーションファイルを作る

次に以下のコマンドでマイグレーションファイルを作成します。
python manage.py makemigrations home
 

マイグレーションファイルとは...

Djangoでデータベースの構造変更を管理するためのファイルのこと。
モデルの変更履歴を保存できるので、開発者が全員同じデータベース構造を持てるようになります。

マイグレートする

以下のコマンドでマイグレーションファイルからDBのテーブルを作成・反映します。
python manage.py migrate home
この作業のことをマイグレートするといいます。

だがしかしBut

テーブルを作成しただけでは、管理画面から入力できません。
テーブルの情報を管理画面にも反映させます。

admin.py

admin.pyにて管理画面の表示を記述することができます。

models.pyで作成したNewsクラスをインポートし、管理画面での各項目を指定しています。

例:list_displayは一覧画面で表示するカラムを指定する。

表示成功!

記事を作成・表示してみる。

管理画面では直感的に記事を作成することができました。

views.py

models.pyで作成したNewsクラスをインポートし、全レコード情報を持ったnews_list辞書を作成。

テンプレートHTMLで表示する項目を指定。

投稿完了!

これらを活用して作ってみたサイトがこちら

デプロイしてみた。

部活の後輩に使ってみてもらえないか相談したところ、OKをもらえたのでデプロイしてみます。

開発環境ではrunserverを使って、デバック機能等を活用しサクサク開発していましたが、本番環境では、Nginx + gunicornの構成で、静的ファイルを効率的に配信できるようにしました。
デプロイが初めてだったので、コンテナをEC2上に作成し動かしました。DBはRDS使用しています。

結構ぐちゃぐちゃにやってしまったのと、本記事の主題ではないため詳細は割愛させていただきます。。

色々あって、デプロイ完了!

(t2.microなので落ちてる可能性ありです。。)
https://huea-rugby-site.com/

まとめ

今回はDjangoを使って簡単なCMSを作成してみました。今までperlしかやったことなかったので詰まる所も多かったですが、AIの力も借りながら、とりあえず動くものができました。

コード量的には大して多くないので、djangoの特徴である「batteries included(必要なものは全部入り)」の哲学を体感できたと思います。(管理画面デフォルトはありがたいですね!)

次はDjangoを使ってWEBアプリ作ってみたいなと思います!
記事一覧へ

New!

Member

システム部開発ユニット
システム部SIユニット
クリエイティブ戦略部デザインユニット
クリエイティブ戦略部プランニングユニット
管理部