
はじめに
大学生の頃、就活も兼ねてHTML,CSSのみの部活のHPを作りました。
学生という肩書が外れて早一年、自分の成長を見るために、弊社の使用言語:Perlにある程度近く人気のあるPythonでCMSを作ってみました。
学生という肩書が外れて早一年、自分の成長を見るために、弊社の使用言語:Perlにある程度近く人気のあるPythonでCMSを作ってみました。
Djangoとは?
DjangoはPythonのWebフレームワークの1つで、YoutubeやInstagramの一部にも使われている人気のフレームワークです。管理画面がデフォルトで搭載されてるなどCMSに適した特徴を持っています。
初期画面を出してみる。
早速、Django開発に移りたいと思います。
まずは、初期画面を出してみます。
まずは、初期画面を出してみます。
環境構築
Dockerコンテナで開発を進めました。
requirementx.txtでdjangoをインストールして、コマンドで各種操作を行っていきます。
requirementx.txtでdjangoをインストールして、コマンドで各種操作を行っていきます。

プロジェクトを開始する。
以下のコマンドを実行することで、Djangoプロジェクトに必要なファイルが自動で作成されます。
(開発途中で分かりづらくなるので、今回は、configというプロジェクト名にしました。)
(開発途中で分かりづらくなるので、今回は、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画面を表示してみたいと思います。
それでは、任意のURL(localhost:8000)でHOME画面を表示してみたいと思います。
アプリの作成
djangoは一つの機能を「アプリケーション」という単位で扱います。
そこで、HOME画面用にhomeというアプリを作成します。
コマンドはこちら↓
そこで、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を指定する。
①プロジェクトディレクトリのurls.pyで、homeのurls.pyを指定する。

これにより、localhost:8000 というリクエストが来ると、homeアプリのurls.pyを使用します。
②アプリのurls.pyでviews.pyを呼び出す。
アプリにはurls.pyが存在しないので、手動で作成する必要があります。
そちらに、vews.pyで作成したhome関数を指定することで、動的なHTMLを返すこと事ができます。
②アプリの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は一覧画面で表示するカラムを指定する。
例:list_displayは一覧画面で表示するカラムを指定する。
表示成功!

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

管理画面では直感的に記事を作成することができました。
views.py
models.pyで作成したNewsクラスをインポートし、全レコード情報を持ったnews_list辞書を作成。


テンプレートHTMLで表示する項目を指定。
投稿完了!

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

デプロイしてみた。
部活の後輩に使ってみてもらえないか相談したところ、OKをもらえたのでデプロイしてみます。
開発環境ではrunserverを使って、デバック機能等を活用しサクサク開発していましたが、本番環境では、Nginx + gunicornの構成で、静的ファイルを効率的に配信できるようにしました。
デプロイが初めてだったので、コンテナをEC2上に作成し動かしました。DBはRDS使用しています。
結構ぐちゃぐちゃにやってしまったのと、本記事の主題ではないため詳細は割愛させていただきます。。
開発環境ではrunserverを使って、デバック機能等を活用しサクサク開発していましたが、本番環境では、Nginx + gunicornの構成で、静的ファイルを効率的に配信できるようにしました。
デプロイが初めてだったので、コンテナをEC2上に作成し動かしました。DBはRDS使用しています。
結構ぐちゃぐちゃにやってしまったのと、本記事の主題ではないため詳細は割愛させていただきます。。
色々あって、デプロイ完了!
(t2.microなので落ちてる可能性ありです。。)
https://huea-rugby-site.com/
https://huea-rugby-site.com/
まとめ
今回はDjangoを使って簡単なCMSを作成してみました。今までperlしかやったことなかったので詰まる所も多かったですが、AIの力も借りながら、とりあえず動くものができました。
コード量的には大して多くないので、djangoの特徴である「batteries included(必要なものは全部入り)」の哲学を体感できたと思います。(管理画面デフォルトはありがたいですね!)
次はDjangoを使ってWEBアプリ作ってみたいなと思います!
コード量的には大して多くないので、djangoの特徴である「batteries included(必要なものは全部入り)」の哲学を体感できたと思います。(管理画面デフォルトはありがたいですね!)
次はDjangoを使ってWEBアプリ作ってみたいなと思います!