[初学者] DjangoアプリをGAEにデプロイ (前編)

#### 前置き
Python２は少し触ったことがありますが、Python3を何か作りながら学習したいと思い始めた作業の記録です。
前編は、<u>__Djangoプロジェクトを作成しGAEにデプロイする__</u>ところまでです。
Djangoにアプリ機能を実装するところはまた後日やりたいと思います。


#### （今後）やりたいこと
- Python3でWebアプリを作る
- GAEを使ってみる　
- Bigqueryを使ってみる
- スクレイピングアプリの実装
- Plotly等でデータをかっこよく表示

### インストールしておくもの
- django
- gcloud
- gunicorn

1. [Djangoの準備](#anchor1)
2. [デプロイのための準備](#anchor2)
3. [デプロイ](#anchor3)

<a id="anchor1"></a>
# 1. Djangoの準備

#### （一応）venvの設定

```
$ python -m venv venv         # venvという名称の仮想環境を作成
$ source venv/bin/activate    # venvをactivateするとき
(venv)$ deactivate            # deactivateするとき
```
w

#### django プロジェクト作成
```
$ django-amin startproject <プロジェクト名>
```
今回は、プロジェクト名を`blogproject`としている。

#### サーバーを起動してみる
その前に、

```<プロジェクト名>/settings.py
ALLOWED_HOSTS = ['*']       # 元は[]
```

に変更すると、ブラウザからアクセスできるようになる。

```
$ python manage.py runserver
```
これでサーバー起動して、`http://127.0.0.1:8000/`へアクセスすると、
RailsのYay!的な画面とロケットのイラストが出てきます。停止するには`Ctrl-C`


#### Topページを作る
`manage.py`と同じ階層に`templates`フォルダを作成し、その中に`top.html`を作成。
今回htmlの中身はテキトー。
次にこの`top.html`を表示させるためのパスを通します。

djangoの汎用view(TemplateView)を使うために以下のラインを追加する。

```blogproject/blogproject/urls.py
from django.views.generic import TemplateView                            # コレと

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', TemplateView.as_view(template_name="top.html"), name='top') # コレ
]
```
この`template`フォルダと`top.html`は勝手に作ったので、それぞれのパスを設定します。
場所は`settings.py`の中の（おそらく）54行目のTEMPLATES内の'DIRS'というところ。

```settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],      # ←ココ
        'APP_DIRS': True,
```
`BASE_DIR`は`settings.py`の上の方ですでに定義されているもので、
プロジェクトフォルダのパスが示されている。

```
$ python manage.py runserver
```
もう一度サーバーを起動して、top.htmlが表示されることを確認！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600462/297170b2-2a43-c353-79f9-72671ed1858d.png)
rootにアクセスして`top.html`が表示されることが確認できました〜



#######################################################

<a id="anchor2"></a>
# 2. デプロイのための準備

#### 2.1 app.yml
GAEに「djangoのアプリをデプロイしますよ〜」という内容を伝えるために、設定をします。
まず、`app.yml`というファイルを`manage.py`と同じ階層に作成します。
[https://cloud.google.com/appengine/docs/standard/python3/runtime](https://cloud.google.com/appengine/docs/standard/python3/runtime)を参考にします。

```app.yml
runtime: python37
entrypoint: gunicorn -b :$PORT blogproject.wsgi:application

handlers:
    url: .*
    script: auto    # アクセスできるurl等の設定はGAEにお任せしますmm
```
#### 2.2 requirements.txt
`manage.py`の階層へ移動して、

```
$ pip freeze > requirements.txt
$ cat requirements.txt 
asgiref==3.2.7
Django==3.0.5
gunicorn==20.0.4
pytz==2019.3
sqlparse==0.3.1
```
GAEに「djangoとかのバージョンはコレでお願いします！」と伝えるファイルを作成。

#### 2.3 gcloud 認証
```
$ gcloud auth login
```
これでブラウザに勝手に移動するので、そこで自分のGoogleアカウントにログインする。
 

まずは[https://console.cloud.google.com/](https://console.cloud.google.com/)へ行き、
自分のGoogleアカウントでログインします。


#### 2.4 Google上の自分のプロジェクトIDを確認
プロジェクトの選択画面より、プロジェクト名とその後の数字をコピーしておく

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600462/6bbe9b3d-85ee-4c94-25fc-8aabf2c195e1.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/600462/2200799b-16fd-8621-5b73-5afb2288353d.png)



#######################################################
<a id="anchor3"></a>
# 3. （やっと）デプロイ

```
$ gcloud app deploy --project blogapp-000000
```

途中、以下を選択する（デプロイ先が日本の場合）

```
 [2] asia-northeast1 (supports standard and flexible)
```
デプロイしたアプリを確認するには

```
$ gcloud app browse
```
とすると、ブラウザが立ち上がりデプロイしたページが表示されます。

これでひと段落！

前編はこれで終わりです。

参考：[GAEにDjangoアプリをデプロイしてみよう！
](https://www.udemy.com/course/gaedjango/)