Djangoでプロジェクトを始める

# はじめに
この記事は、自分がPythonで実装されたWebフレームワークDjangoを用いてコメント機能を付けた書籍リストを作っていた際の冒頭の流れを大雑把にまとめたものになります。
書籍リスト及びコメント機能を作る流れに関してはここでは触れません。続きを書くかどうかは未定です。
今回は初心者向けの記事とします。

環境構築の手順は[ドキュメント](https://docs.djangoproject.com/ja/2.0/)等をご参照ください。

[作業環境]
Python-3.6.2
Django==2.0

書籍リストの出来上がったサンプルは[こちら](https://libut487209107.herokuapp.com/)になります。  

(注意点)Djangoはバージョン2.0からPython2系のサポートが打ち切りになっています。Python3系で行うようにしてください。

## プロジェクトを作成する
ここからプロジェクトを作る流れになります。次のコマンドを実行してください。

```
$ django-admin.py startproject libut
```

これでlibutというディレクトリが生成されました。中身を確認します。

```
$ tree libut
libut
├──libut
│  ├──__init__.py
│  ├──settings.py
│  ├──urls.py
│  └──wsgi.py
└──manage.py
```

確認出来ましたか？それでは移動しましょう。

```
$ cd libut
```

ここで、言語及びタイムゾーンの設定を日本(語)にしたいと思います。`libut/settings.py`で変更出来ます。

```python3:settings.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ja'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Tokyo'
```

因みにデータベースの設定もこのファイルに存在します。デフォルトではSQlite3を使用するようになっています。

```python3:settings.py
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
```

それでは、データベースをマイグレートしましょう。`manage.py`の位置するディレクトリに移動して次のコマンドを実行してください。

```
$ python manage.py migrate
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 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 sessions.0001_initial... OK
```

無事に完了しました。
この時、`db.sqlite3`というファイルが現在自分のいるディレクトリに生成されているので確認してください。

## サーバを起動する

試しに開発用サーバを起動してみましょう。

```
$ python manage.py runserver
```

http://127.0.0.1:8000 にアクセスしてみてください。
以下のように表示されたら成功です。

<img width="1280" alt="LocalServer.png" src="https://qiita-image-store.s3.amazonaws.com/0/189119/fe726feb-b7d0-d16f-4c69-a4f6840542c9.png">

## スーパーユーザの作成

次のコマンドを打ってスーパーユーザを作りましょう。

```
$ python manage.py createsuperuser
```

ユーザーネームやEmailアドレス、パスワードを設定します。
以下を見て頂けたらお分かりになると思いますが、短すぎるパスワードに対してはお叱りを受けるので注意しましょう。

```
Username (leave blank to use '◯◯◯◯'): admin #adminにする必要はない
Email address: libut@libutsample.com
Password: 
Password (again): 
The password is too similar to the email address.
This password is too short. It must contain at least 8 characters.
Password: 
Password (again): 
Superuser created successfully.
```

これで設定完了です。

## アプリケーションを作成する
いよいよ、アプリの作成に取り掛かります。manage.pyがあるディレクトリに移動し、次のコマンドを用います。

```
$ python manage.py startapp books
```

これで`books`というディレクトリが生成されたので確認してみましょう。

```
$ tree -L 2 .
.
├── books
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── libut
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py
```

ここから`books`内の`models.py`や`views.py`などを編集したり、自動で生成されない`urls.py`や`forms.py`などを作成する流れになります。
また`models.py`において定義したデータのモデルを有効化する必要があるので、「`books`がインストールされた」とプロジェクトに伝える為に`libut/settings.py`を編集することも忘れてはいけません。

## おわり

今回の記事はここまでになります。
大雑把な流れでしたが、Djangoに少しでも興味を持てて頂けたら嬉しく思います。