はじめてのDjangoまとめ

Djangoについて

今回は、DjangoでCRUDのアプリを作成してみました。
色々と整理をしたので、こちらにまとめます。

<h2>Djangoとは、Pythonのフルスタックフレームワーク</h2>

まず、DjangoはPythonベースのフレームワークです。
他にもFlaskやFastAPIがありますが、
これらに比べると、大規模アプリ作成に向いています。

Rubyで例えると、Ruby on Railsが該当します。
Ruby on Railsは、MVCフレームワークのアーキテクチャですが、
Djangoは、これに似ていて異なる、MVT(Model、View、Templete)です。


昨今では、GAFAがPythonを使用していたことをベースに、
プログラミング言語の使用ランキングでも上位に君臨していますが、
日本の開発現場でも、Pythonを選択されることが非常に増えてきました。

Pythonは、データ分析やAI開発、スクレイピング等、
様々なことができるように、ライブラリも豊富ですが、
フレームワークを使用しての、アプリ開発でも多く使用されています。

今回のDjangoも、とても多くの開発現場で使用されています。
では、長くなってしまいそうなので、
Djangoのアプリ作成の手順の方に移ります。

<h2>Djangoの環境構築</h2>
環境
既にPythonが入っていることは前提とします。

Ubuntu 22.04.4 LTS
Python 3.9.18

仮想環境を作成する場合、
例えば、django_envという名前で作成すると、
```
:~/django_prac$ python3 -m venv django_env
```
作成した仮想環境に入るには、
```
:~/django_prac$ source django_env/bin/activate
(django_env) yusuke@LAPTOP-2142KMCS:~/django_prac$
```
(django_env(仮想環境名))となったので、こちらで作成ができました。 

次にDjangoをインストール
```
$pip install django
```
インストールできているか、
pip listで確認します。
```
(django_env) yusuke@LAPTOP-2142KMCS:~/django_prac$ pip list
Package           Version
----------------- -------
asgiref           3.8.1
Django            4.2.16
pip               23.0.1
setuptools        58.1.0
sqlparse          0.5.1
typing_extensions 4.12.2
```
Djangoをインストールできたので、プロジェクトの起動をします。
Djangoは、プロジェクトとアプリケーションという概念があり、
ざっくり、全体的な設定をプロジェクトに、ロジックやDB周りをアプリに記載という、
切り分けになります。
```
$django-admin startproject django_project
```
django_projectディレクトリが作成されるので、移動します。
```
$cd django_project/
```
移動後にls -l で確認をすると、プロジェクトとmanage.pyが作成されていることを確認できます。
```
$ ls -l
total 8
drwxr-xr-x 2 yusuke yusuke 4096 Nov  1 09:59 django_project
-rwxr-xr-x 1 yusuke yusuke  670 Nov  1 09:59 manage.py
```
これでサーバー起動をします。
```
python manage.py runserver
```
http://127.0.0.1:8000
アクセスをします。
こちらがブラウザで表示できれば想定通りです。
ちなみに、右上にDjango 4.2とバージョンが表示されます。
![Djangoサーバ起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676205/2a40356c-c774-49b2-9299-2310f32301da.png)

プロジェクトの作成はできたので、
Timezoneの変更をします
プロジェクト配下のsettings.pyの以下を変更します。
(変更前)
```
LANGUAGE_CODE = "en-us"
TIME_ZONE = "UTC"
```
```
(変更後)
LANGUAGE_CODE = "ja"
TIME_ZONE = "Asia/Tokyo"
```
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676205/f01cbf5c-1a91-9e54-33e4-b43595bc77be.png)
こちらで、Timezoneと、言語が日本に変更されました。

次にマイグレーションを行います。
マイグレーションは、データベースの構造を管理、変更するための仕組みです。Djangoでモデル（models.pyに定義したクラス）を作成や変更した際に、その内容をデータベースに反映するのがマイグレーションの役割です。

作成するアプリのDB設定の反映に使われますが、
まずは、初期設定の反映として必要な作業になります。
Djangoのデフォルトで用意されている管理機能やユーザ認証機能など、標準のアプリケーション用のテーブルがデータベースに作成されます

※デフォルトではSQLiteがDBになっていますが、
他のDBを使用したいのであれば、settings.pyにその記載が必要です。
今回はSQLiteのまま使用します。
```
python manage.py migrate
```
成功すると、以下のようなログが表示されます。
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
次にアプリケーションの作成をします。
```
python manage.py startapp django_app
```
こちらでプロジェクトと同じ階層にアプリが作成されます。
次に、settings.pyに'アプリ名'を追加します。
```
  INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    'django_app'
]
```
こちらで、アプリ作成の準備は整いました。
次の記事では、作成済のメッセージアプリを使い、
CRUDの作り方を説明します。