Django　初期設定

# 記事を書こうと思った経緯
Djangoにてアプリを開発する際、毎回、調べながら初期設定を行っているので、自分なりにまとめてみることにした。

# 目次

・Djangoのインストール
・プロジェクトの作成
・アプリの作成
・settings.pyの設定
・テンプレートフォルダ、staticフォルダの作成、反映
・起動確認

## Djangoのインストール
```
pip install Django　
```
version指定の場合はDjango~=4.2.0とする

## プロジェクトの作成
プロジェクトとは、Djangoにおけるアプリの置き場のようなもの。
作成したプロジェクトの中に複数のアプリを作成することができる。
以下を入力する。
```
django-admin startproject プロジェクト名 .
```
すると、プロジェクト名のファイルと、manage.pyのファイルが作成される。
現在のディレクトリにファイルを作成したいので　`.`をつける

## アプリの作成
以下を入力することによりアプリを作成することができる
```
python manage.py startapp アプリ名
```
すると、アプリ名のファイルが作成される

## settings.pyの設定
プロジェクトのsettings.pyの設定を変更しなければならない。

### 言語変更
日本語に変更

```python
LANGUAGE_CODE = 'en-us'
```
↓
```python
LANGUAGE_CODE = 'ja'
```

### 基準時間変更
東京に変更
```python
TIME_ZONE = 'UTC'
```
↓
```python
TIME_ZONE = 'Asia/Tokyo'
```

### アプリを追加
アプリの設定をプロジェクト全体で有効にするため
```python
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
```
↓
```python
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'アプリ名'
]
```

### 変更したものを反映させる

```python
python3 manage.py migrate
```

↓こんなものが出ればOK
    
```
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
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
```


## テンプレートフォルダ、staticフォルダの作成、反映
今回は`templates`と`static`というファイル名を作成。
`templates`にはテンプレートを。`static`には、CSSファイルや画像を。
今回はこういったディレクトリ構造にした。
```
├── MainApp
├── accounts
├── db.sqlite3
├── manage.py
├── myenv
├── mysite
├── requirements.txt
├── static
│   └── css
└── templates
    ├── accounts
    └── base.html
```

settings.pyのTEMPLATESのDIRSに`os.path.join(BASE_DIR, 'templates')`を追加
```python
import os #インポート部分に記載しておく

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
```
これで、テンプレートを作成したあと、アプリに反映されるようになる。

また、CSSファイルをテンプレートに反映させるため、settings.pyに以下を入力
```python:settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    BASE_DIR / "static",
]
```
HTMLに以下を入力することでCSSが反映される
```html:base.html
<link rel="stylesheet" href="{% static 'css/style.css' %}">
```
::: note
```
STATICFILES_DIRS = [
    BASE_DIR / "static",
]
```
これを入力することで、djangoがcssフォルダのルートを探し出してくれる。
条件は、staticフォルダにいれること。staticフォルダに入れておくと、自動的にルートを探し出してくれる。アプリごとにtemplatesフォルダを作成すると、上記を入力しないで済む。
:::

### 起動確認
以下を入力してアプリを起動させる。無事に起動できれば初期設定完了である。
```
python manage.py runserver
```


# 感想
テンプレートの設定を行っていなくて、アプリに反映されずパニックになっていたが、今回の学習で理解した。初学者の参考になれば幸いです。