DockerでDjango

##やりたいこと
[プロジェクトを作成しよう・workshop_tutorialJP](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/content/django_start_project/)
このサイトに沿ってアプリケーションを作る
virtualenvでなくDockerで。

##環境
`Docker for Windows Version 18.06.1-ce-win73(19507)`


##プロジェクトを作る
1.`djangogirls`ディレクトリを作成し、配下に以下の3ファイルを作成する

```
djangogirls
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
```



```:Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
```

```:docker-compose.yml
version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
    - .:/code
    ports:
    - "8000:8000"
    depends_on:
    - db
```


```:requirements.txt
Django>=1.8,<2.0
psycopg2
```

2.必要なディレクトリとファイルを作成する

`docker-compose run web django-admin.py startproject mysite .`

```
djangogirls
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
```

3.サービスのビルドを行う
``docker-compose build``

4.Dockerコンテナを起動
``docker-compose up``

5.ブラウザで動作確認
ブラウザで http://127.0.0.1:8000/ へアクセスする
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/295791/4f58f917-ca70-9784-b321-54da973d0e37.png)





##Djangoモデルを作成する



1.アプリ作成
``docker-compose run web python manage.py startapp blog``

 blogディレクトリが作られる

```
djangogirls
├── blog
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── db.sqlite3
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── manage.py
└── mysite
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
```



2.`mysite/settings.py`のINSTALLED_APPSに`'blog',`を追加する

```python:mysite/settings.py
INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'blog',
)
```


3.`blog/models.py`に以下の内容をコピペする

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

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    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
```

##データベースにモデル用のテーブルを作る
1.モデルをDBに追加する
``docker-compose run web python manage.py makemigrations blog``

2.DBに入れるための移行ファイルを実行する
``docker-compose run web python manage.py migrate blog``


##ログインする
1.`blog/admin.py`に以下の内容をコピペする

```python:blog/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
```

2.superuserを作成する
``docker-compose run web python manage.py createsuperuser``
ユーザ、メールアドレス、パスワードを聞かれるので入力する。（パスワードは簡単すぎると怒られる）

3.ログイン
http://127.0.0.1:8000/admin/ へアクセスしログインする。

4.ログインできる
やったー

（デプロイまで行ったらまた追記します）

（2018/10/30追記）herokuデプロイで永遠に詰んでいる