【Django】Django Girlsのチュートリアルの要約

[Django Girlsのチュートリアル](https://tutorial.djangogirls.org/ja/)では、djangoを使った簡単なブログを作成する方法が学べます。
本記事は私がその復習のためにノート代わりとして記述したものです。
ここではdjangoプロジェクト作成の手順と最低限の操作をまとめています。

環境: Windows 10 + Visual Studio Code

## 1. 仮想環境の構築とdjangoのインストール

作業フォルダを新規作成して移動します。

```console:terminal
> mkdir djangogirls
> cd djangogirls
```

仮想環境を構築し、適用します。

```console:terminal
> python -m venv myvenv
> myvenv/Scripts/activate
```

pipでdjangoをインストールします。(チュートリアルのdjangoのバージョンは2.2.4)

```console:terminal
(myvenv)> python -m pip install --upgrade pip
(myvenv)> pip install django==2.2.4
```

## 2. プロジェクトの作成

新規プロジェクトmysiteを作成します。
プロジェクト名は任意です。

```console:terminal
(myvenv)> django-admin startproject mysite .
```

## 3. 設定ファイル(setting.py)の変更

mysiteにあるsetting.pyにある次の項目の値を変更します。

```python:mysite/setting.py
# 1.タイムゾーンを設定
TIME_ZONE = 'Asia/Tokyo'

# 2.言語を設定
LANGUAGE_CODE = 'ja'

# 3.静的ファイルの場所を設定
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# 4.ホストのアドレスを設定
ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com']

# 5.データベースの設定
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
```

## 4. アプリの追加

mysiteにblogというアプリを新規作成します。

```console:terminal
(myvenv)> python manage.py startapp blog
```

アプリを追加したことをプロジェクトに知らせます。

```python:mysite/setting.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog.apps.BlogConfig',  # 追加した行
]
```

## 5. アプリにモデルを追加

blogアプリにPostモデルを追加します。

```python:blog/models.py
from django.conf import settings
from django.db import models
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
```

モデルを追加したことをDBに知らせます。
この操作はモデル作成時のみで大丈夫です。

```console:terminal
(myvenv)> python manage.py makemigrations blog
```

モデルを[マイグレート](https://wa3.i-3-i.info/word17035.html)します。
今後もモデルの構成に変更がある場合はこの操作を行います。

```console:terminal
(myvenv)> python manage.py migrate blog
```

## 6. 管理者を登録する

DjangoにはDjango Adminという機能があり、
管理者権限でログインしなければ見られない管理画面がプロジェクト毎に自動作成されます。

まず、管理者権限を持つユーザーを登録します。

```console:terminal
(myvenv)> python manage.py createsuperuser
```

指示に従って情報を登録していきます。

```console:terminal
Username: ola
Email address: ola@example.com
Password:
Password (again):
Superuser created successfully.
```

以降、登録したユーザーで管理画面にログインできます。

## 7. 管理画面からモデルを見られるようにする

作成したPostモデルを管理画面で見られるようにします。

```python:blog/admin.py
from django.contrib import admin
from .models import Post

admin.site.register(Post)
```

## 8. サーバーの起動

```console:terminal
(myvenv)> python manage.py runserver
```

起動できたら、例えば管理画面へはhttp://127.0.0.1:8000/admin/<span/>からアクセスできます。


## 9. プロジェクトのデプロイ

デプロイについては[こちら](https://tutorial.djangogirls.org/ja/deploy/)を参照ください。
pythonanywhereを使った小規模なサービスを無料で公開する方法が書かれています。