djangoでアプリを作成するまで

##概要
PythonのフレームワークであるDjangoでアプリを作ってherokuに更改するまでをまとめてみた。
今回は参考用のため必要最低限のことしか記載しておりません。

##前提
仮想環境で構築しておりますが、仮想環境以外でも同様の事が可能です。
Python 3.7.12

##手順
####djangoのインスストール

```
% cd (作業用のディレクトリ)
% pip install django
```

####Djangoプロジェクトを始める

```
$django-admin startproject config . 
```

これはconfigというフォルダ名で、Djangoプロジェクトをスタートするコマンドです。
フォルダ名はconfig出なくてもOK
最後の「.」は現在のディレクトリで作成するためオプション
これによりmanage.pyなどのファイルができる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633008/93ab4976-ee15-d989-9ad5-bf61bf05b357.png)


####アプリケーションを開始する

```
python manage.py startapp twanalyse
```

twanalyseは使用するアプリケーション名※任意

####config/settings.pyの初期設定

事前にapps.pyのクラス名を確認しておく

```twanalyse/apps.py
class TwanalyseConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'twanalyse'
```

先ほどのクラス名を含めた読み込ませる設定とその他の設定を行う

```config/settings.py
# 以下の項目を日本設定に書き換える
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'

＃追記する
INSTALLED_APPS = [
    'django.contrib.admin',
　　　　　　　　　・・・
    'twanalyse.apps.TwanalyseConfig',
]
```

####データベースを構築する
Djangoでデータベースを扱うには、以下の手順を実行する必要があります。
①models.pyでモデルを定義
②マイグレーションファイルを作成
③データベースのテーブルに反映

①models.pyでモデルを定義
使用するデータベースを作成する　※ログイン用のID、パスワードは別途作成するのでここでは作らない

```twanalyse/models.py
# Create your models here.
class Post(models.Model):
  # ユーザーIDを入力するフィールド
  userId = models.CharField(max_length = 100)
  # auto_now_add=Trueでデータを作成した時に現在の日付を自動で設定する
  acquisition_date = models.DateTimeField(auto_now_add=True)
```

②マイグレーションファイルを作成

```
% python manage.py makemigrations
% python manage.py migrate
```

ここでDBを管理するためのスーパーユーザーを作成しておく
```
% python manage.py createsuperuser
```

③データベースのテーブルに反映
作成したテーブルを管理画面で使うための追加設定

```twanalyse/admin.py
from django.contrib import admin
# Postクラスを読み込む（Postはデータベースのカラムを定義したクラス）
from twanalyse.models import Post

# Register your models here.
admin.site.register(Post)
```

HTMLファイル（トップページ）を作成する
アプリケーションフォルダ/templates/アプリケーション名とフォルダを作りその中にHTMLファイルを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633008/a829def0-932a-8867-2cbb-2347e39acb77.png)

中身を記載する

```twanalyse/templates/twanalyse/index.html
<h1>テスト</h1>

```

HTMLファイルを開くための設定をする
ユーザーがアクセスしてきた時にアプリケーションフォルダ内のurlsファイルを開く

```config/url.py
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    # アプリケーションフォルダ内のurlsファイルを開く
    path("", include("twanalyse.urls"))
]
```

アプリケーション名/urls.pyを手動で作成し以下を記載する

```twanalyse/urls.py
from django.urls import path
from twanalyse.views import toppage

urlpatterns = [
  path("",toppage.as_view(),name="toppage")
]
```

アプリケーション名/views.pyにhtmlを描写するための記載をする

```twanalyse/views.py
from django.shortcuts import render
from django.views.generic.base import TemplateView

# Create your views here.
class toppage(TemplateView):
  template_name = "twanalyse/index.html"
```


これで一応HTMLファイルの表示ができるようになる。
以下のコマンドで自前のローカルサーバーを起動する

```
% python manage.py runserver
```

これで「http://127.0.0.1:8000/」を開けばHTMLファイルの内容が表示されているのがわかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/633008/afde95cf-1b8e-2659-0d67-8f0f2e95b24f.png)

これで一応ページが表示されるようになったが、このままではherokuにはあげられないため以下の設定をする（※詳しいデプロイ方法は次回以降に記載予定）

####.gitignoreを設定する（必要に応じて）
gitやherokuで使用するためにgitignoreの設定をする

```.gitignore
.env
*.pyc
db.sqlite3
myvenv
__pycache__
local_settings.py
```

####Procfileを作成する
アプリーケーションフォルダ直下にProcfileファイルを作成する
以下の内容を記載する

```Procfile
web: gunicorn config.wsgi
```

あとはherokuの設定などをしていく