[Python]とにかくわかりやすく！Djangoでアプリ開発！ーその８(最終)ー

#前回の記事
[[Python]とにかくわかりやすく！Djangoでアプリ開発！ーその７ー](https://qiita.com/hiroyuki_mrp/items/3ef6aeba5e342d4fe672)

#本記事の目的
python初心者の方が、本記事を見たあとに、一人でアプリ開発できることを目的にしております。
※インストールや開発環境については記載しません

#環境
macOSX　Sierra
python3.7
django 2.1.5

#前回まで
だいぶ長くなってきたので、どのようなことをやってきたか詳細を割愛しますが、たくさんのことをしてきました。
フロントの話やDBの話はまだまだありますが、最低限の機能がついたものとして、公開をしてみたいと思います。
※今回herokuを使いますので事前にherokuのアカウント発行まではしておいてください。

#絶対に必要なものをインストール

ここら辺はpipで用意します。

```
$ pip install dj-database-url gunicorn whitenoise
```
#requirements.txtの用意

requirements.txtを用意して、書き込みを行います。

```
$ pip freeze > requirements.txt
```
中身はこんな感じです。

```requirements.txt
dj-database-url==0.5.0
Django==2.1.5
django-contrib-comments==1.8.0
gunicorn==19.9.0
psycopg2==2.7.5
whitenoise==4.0
```

#そのほか必要なファイルの用意

Procfileとruntime.txtとlocal_setting.pyを用意しておきます。


```Procfile
web: gunicorn myapp.wsgi
```


```runtime.txt
python-3.6.6
```

```local_setting.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


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

DEBUG = True
```

最終的なtreeはこんな感じ

```tree
myapp
├── Procfile #ここ
├── db.sqlite3
├── app1
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── migrations
│   │   ├── 000x_auto_20190308_2248.py
│   │   └── __init__.py
│   ├── model.txt
│   ├── models.py
│   ├── static
│   │   └── kenko
│   │       └── css
│   │           └── style.css
│   ├── templates
│   │   └── kenko
│   │       ├── create.html
│   │       ├── delete.html
│   │       ├── edit.html
│   │       ├── find.html
│   │       └── index.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── local_settings.py #ここ
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── requirements.txt #ここ
└── runtime.txt #ここ
```

#settings.pyの修正

settings.pyの最後に以下を追加

```settings.py
import dj_database_url
DATABASES['default'] = dj_database_url.config()

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO','https')

ALLOWED_HOSTS = ['*']

STATIC_ROOT = 'staticfiles'

DEBUG = True

try:
    from .local_settings import *
except ImportError:
    pass

STATIC_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
```

#herokuに送る

一応

```
$ git init
```
ログインしてアプリを作ります。

```
$ heroku login
$ heroku create アプリ名
```
remoteで接続します。

```
$ git remote add heroku https://git.heroku.com/アプリ名.git
```
あとはこんな感じで

```
$ git add -A
$ git commit -m "commit"
$ git push heroku master
```

https://<< herokuに登録したアプリ名>>.herokuapp.com
にアクセスしたらアプリは自分のPC以外からも見れるようになっています。


#補足

デプロイ後にcssが読み込まれなかったので
最後のwhitenoiseを追加したら解決。当然修正のたびにherokuにpushが必要です。

```settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
]
```

#参照
[macでheroku deploy](https://qiita.com/tetsu-sh/items/f6fcbb6b85df04e5cf3f)

#最後に

約１ヶ月程度をかけてその８まで投稿しました。再度勉強し直したところもありました。
誤字脱字の修正はこれから行います。
本当はバリデーションのこととかDBのこととかまだまだまだまだ内容はありますが、一旦ここで終わりにして、また余裕ができたときに追加をしていきます。
ここまで全部みられたかたがどこまでいらっしゃるかわかりませんが、ありがとうございます。