Djangoでのlocalhostではないhello world


## はじめに
作業時にはGoogle Cloud Platformにインストールしています。
DjangoのHello Worldではまずlocalhostで行うことが多いと思いますが、デプロイの一連の流れを記載する意味で書いています。
前提として、[mod_wsgiでhello worldを描画する](http://qiita.com/shigechioyo/items/2b25f60918be6b81581a)を行なっているものとします。(mod_wsgiが必要なので)

環境
OS: Debian 9.0 stretch
Python: 3.6.3

## Djangoのインストール
早速インストールしていきます。
Python周りは既にインストールされているものとします。
まず、pipをアップグレードして、Djangoをインストールします。

```bash
pip install --upgrade pip
pip install django
```

...本当にインストールされたのでしょうか。
以下を順に打ち込んでみます。

```bash
python
>>> import django
>>> django.get_version()
'2.1.5'
```

このようにバージョンを確認することができれば、インストールは成功しています。
その後は```quit()```と打ち込んでpythonモードを終了しましょう。

## Djangoプロジェクトの作成
ホームディレクトリに移動してDjango Projectを作成します。(別にホームディレクトリではなくてもよいのですが)

```bash
cd ~
django-admin startproject myproject
```

これでHOMEディレクトリ直下にDjangoプロジェクトが作成されています。

## apache2の設定ファイルを変更する
ドキュメントルートへのアクセスに対してDjango内のwsgi.pyで応答させるよう、apache2の設定ファイル(sites-available/000-default.conf)を変更します。

```bash
cd /etc/apache2/sites-available
sudo vim 000-default.conf
```

```DocumentRoot```をコメントアウト(このように→```# DocumentRoot /var/www/html```)してください。
[mod_wsgiでhello worldを描画する](http://qiita.com/shigechioyo/items/2b25f60918be6b81581a)で```WSGIScriptAlias```を設定していた場合は、これも消してください。
その後、以下を追加します。USERNAME部分を変更するのを忘れずに
ちなみにvimでは```:%s/USERNAME/YOURNAME/g```で置換できます。

```bash
WSGIScriptAlias / /home/USERNAME/myproject/myproject/wsgi.py
WSGIPythonPath /home/USERNAME/myproject

<Directory /home/USERNAME/myproject/myproject>
    <Files wsgi.py>
    Order deny,allow
    AllowOverride None
    require all granted
    </Files>
</Directory>
```

## django設定ファイルの settings.py を変更する
ファイル名の通り、Djangoに関する設定を変更します。
ここではvimでファイルを編集します。

```bash
cd ~/myproject/myproject
vim settings.py
```

まず、アクセスできるHostを設定する必要がありますので、ALLOWED_HOSTS = []を変更します。

```
ALLOWED_HOSTS = ["*"]
```

次に言語と時刻設定を変更します。

```
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'Asia/Tokyo'
```

## Django Applicationを作成する
ここまでで、Djangoプロジェクトを作成しました。次にDjangoアプリケーションを作成します。
例によって```manage.py```を使用します。

```bash
cd ~/myproject
python manage.py startapp myapp
```
 
すると以下のような階層構造が出来上がっているはずです。

```bash
myproject
  |
  ├── myapp
  │     ├── __init__.py
  │     ├── admin.py
  │     ├── apps.py
  │     ├── migrations
  │     │   └── __init__.py
  │     ├── models.py
  │     ├── tests.py
  │     └── views.py
  ├── db.sqlite3
  ├── manage.py
  └── myproject
      ├── __init__.py
      ├── settings.py
      ├── urls.py
      └── wsgi.py
```

次に```myapp```アプリケーションを認識させるため、```settings.py```の編集を行います。

```bash
cd ~/myproject/myproject
vim settings.py
```

```bash
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp'
]
```

このように```myapp```を追加することで、作成したアプリケーションが認識されます。

## views.pyを編集する
画面の描画部を作成します。
myappフォルダ内のviews.pyの編集です。

```
cd ~/myproject/myapp
vim views.py
```

```bash
from django.shortcuts import render
from django.http import HttpResponse

def home(request):
    return HttpResponse("Hello, Django World")
```

## urls.pyを編集する
クライアント側のリクエストurlに対してどのviewを返すのか、そのロジックを作成します。

```
cd ~/myproject/myproject
vim urls.py
```

```bash
from django.contrib import admin
from django.urls import path
from myapp.views import home

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

最後にapache2を再起動してください。

```
sudo service apache2 restart
```

これで *Hello Django World* が描画されるはずです。
次はデータベースをPostgreSQLに変更する予定です。