Djangoの初期設定

# はじめに

ここでは、Djangoを始めるにあたって最低限必要になるコマンドについて解説していきます。


# Djangoプロジェクトの作成

新しいDjangoプロジェクトを作成するには、新規プロジェクト用のディレクトリに移動した上で、以下のコマンドを実行します。

```bash
django-admin startproject プロジェクト名
```
作成されるフォルダ階層を1つ分減らしたい場合は、プロジェクト名の後に` .`（半角スペースとピリオド）を追記します。
僕は、プロジェクト名をつけたディレクトリで以下のコマンドを実行することが多いです。

`django-admin startproject config .`

作成されるプロジェクトディレクトリには、これから作成するアプリケーション全てに関係する設定を記述するファイルが作られるので、ディレクトリ名を`config`にしておき、アプリケーションディレクトリと並べてプロジェクト用のディレクトリ（あらかじめ作成しておいたフォルダ）に配置する形にしています。


# アプリケーションの作成

アプリケーションを作成するには、以下のコマンドを実行します。

```bash
python manage.py startapp アプリケーション名
```

# HTMLファイルやCSSファイル、画像を保存するディレクトリの作成
`manage.py`と同じ階層に、CSSやjavascriptのファイル、および画像を保存するためのディレクトリを作成します。
僕は、CSSファイルやjavascriptファイルを保存するディレクトリを`static`に、画像を保存するディレクトリを`media`にすることが多いです。

```bash
mkdir static
mkdir media
```

# settings.pyへの追記

作成したプロジェクトディレクトリの中に、`settings.py`というファイルがあります。
このファイルに、以下のように追記していきます。

```python:settings.py
# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    作成したアプリ名, # ここを追記する。
]
```

```python:settings.py
import os
# いろいろなコード（省略）

STATIC_URL = '/static/'
# ここから下を追記する。
STATICFILES_DIRS = [os.path.join(BASE_DIR, CSSファイルを保存するディレクトリ)]

MEDIA_URL = 画像のURL

MEDIA_ROOT = os.path.join(BASE_DIR, 画像を保存するディレクトリ名)

LOGIN_URL = ログインページのURL
```

# urls.pyへの追記

上記のCSSファイルや画像のURLに関する設定を`urls.py`に追記します。

```python:urls.py
from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    path('admin/', admin.site.urls),
] 

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

```

`if settings.DEBUG`のところは、開発用に動作させているときのみ、という意味です。

# HTMLテンプレートの作成

全てのHTMLファイルに共通する部分を書いた、テンプレートとなるHTMLファイルを作成します。
僕は、アプリケーションディレクトリに`templates`ディレクトリを作成し、さらにアプリケーション名のディレクトリを作成して、その中に`base.html`というファイルを作成することが多いです。
`base.html`では、`head`タグ内に、CSSファイルの保存場所を書いておきます。
僕の場合は、
`<link rel="stylesheet" href="{% static 'style.css' %}" type="text/css">`
とすることが多いです（ここでは、CSSファイル名は`style.css`としています）。

```html:base.html
<!DOCTYPE HTML>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="{% CSSファイルを保存するディレクトリ名 CSSファイル名 %}" type="text/css">
    <title>サンプルページ</title>
  </head>
  <body>
    
  </body>
</html>
```

そして、他のHTMLファイルには、`base.html`を参照するために以下のコードを記述します。

```html:sample.html
{% extends テンプレートHTMLファイル名 %}
```

上で書いたディレクトリ構成だと、`{% extends 'アプリケーション名/base.html %}`となります。


# データベースの設定

データベースに関連する設定は、主に`models.py`に記述することになりますが、`make migrations`コマンドにより、データベース関連の設定の変更を記録することができます。
アプリケーション名を省略すると、プロジェクト内の全アプリケーションに対して適用されます。

```bash
python manage.py makemigrations （アプリケーション名）
```

そして、エラー等の問題がなければ、`migrate`コマンドによってデータベース本体に変更を適用します。
こちらもアプリケーション名を省略することもできます。

```bash
python manage.py migrate （アプリケーション名）
```

# 管理者の設定

管理者権限をもつユーザーを作成するには、以下のコマンドを入力します。

```bash
python manage.py createsuperuser
```

ユーザー名とEメールアドレス、パスワードを聞かれるので、順番に入力していきます。


# ローカルサーバーの起動

ローカルサーバー（開発用サーバー）を起動するには、以下のコマンドを実行します。

```bash
python manage.py runserver
```

また、`Ctrl + C`でサーバーを停止させることができます。


# まとめ

ここでは、Djangoを始めるにあたり最低限必要なコマンドについて解説しました。
これらを理解できれば、Django理解への第一歩を踏み出したことになります。