django 設定手順

djangoは最初の設定手順が多く覚えられないのでメモ
前回作った仮想通貨のチャートを表示するwebアプリを作る

プロジェクトの作成

django-admin startproject chart_prj

作成したプロジェクトフォルダにtemplatesとstaticという名のフォルダを作成

cd chart_prj
mkdir templates
mkdir static

chart_prjの中のsettings.pyにtemplatesフォルダを紐づける

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],    <--------ここ!
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

そのままsettings.pyの一番下にstaticフォルダを紐づける記述を追加

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

表示するhtmlを作成し、templatesの中へ入れる
index.htmlの中身

<html>
<head>
<title>staticfile test</title>
<style>
p.chart_png img{width: 100%}
</style>
</head>
<body>
    <p class="chart_png">
          {% load static %}
          <img src="{% static "chart.png" %}">
    </p>
</body>
</html>

index.htmlで表示するchart.pngをstaticの中へ入れる

一通りフォルダを作ったりファイルを置いたりが終了


webアプリを作成

python manage.py startapp drawapp

settings.pyのINSTALLED_APPSにアプリを追加

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'drawapp',     <-------ここ!
]

INSTALEED_APPSに何かものを追加したらmigrateする

python manage.py migrate

drawappの中のviews.pyにindex.htmlを呼ぶプログラムを書く

from django.shortcuts import render
 
def index_template(request):
    return render(request, 'index.html')

drawappの中にurls.pyを作り、中身を次のように書く

from django.urls import path
from . import views

urlpatterns = [
    path('templates/', views.index_template, name='index_template'),
]

chart_prjの中にもurls.pyがあるので、上記のurls.pyを参照できるように追加で記述

from django.contrib import admin
from django.urls import path, include     <---------ここ!
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('drawapp/', include('drawapp.urls')),     <---------ここ!
]


ここまででローカルでのwebアプリ作成が終了
サーバーを立ち上げて確認

python manage.py runserver

http://localhost:8000/drawapp/templates
にアクセスし、正しくchart.pngが表示されることを確認


herokuにデプロイするための準備

Procfileというファイルを作りchart_prjのルートに配置
Procfileの中身

web: gunicorn chart_prj.wsgi --log-file -

runtime.txtを作りchart_prjのルートに配置
runtime.txtの中身

python-3.7.10

chart_prjのルートに仮想環境を設置

python -m venv chart_env

仮想環境をアクティベート

source chart_env/bin/activate

必要なライブラリを仮想環境にインストール

pip install django whitenoise gunicorn

herokuにログインする

heroku login

ブラウザが起動するので、ログインボタンをクリックする

heroku上にwebアプリを格納する場所を作る

heroku create chart-page

作った場所のWeb URLを確認する

heroku apps:info chart-page

settings.pyを編集

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False       <---------ここ!

ALLOWED_HOSTS = ['chart-page.herokuapp.com', '127.0.0.1']        <-----------ここ!


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'drawapp',
]

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',                <--------------ここ!
]

settings.pyの一番下のSTATICの設定も変更
STATICFILES_DIRSはコメントアウトし、STATIC_ROOTを追加

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/

STATIC_URL = '/static/'
"""
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
"""
STATIC_ROOT = os.path.join(BASE_DIR, 'static')           <------------ここ!

下のコマンドで静的ファイルを一箇所にまとめる

python manage.py collectstatic

staticフォルダにadminフォルダが生成されているのを確認

ブラウザ上のherokuから作成したアプリを開き、settingsをクリック
右下Add BuildpackをクリックしてPythonを選びsave changesをクリック
メニューバーのDeployをクリック

chart_prjのルートにリポジトリを作成し、herokuにセット

git init
heroku git:remote -a chart-page

herokuのリモートリポジトリに、変更点をaddして、commitし、push
git add . の「.」は全てのファイルをまとめて追加という意味

git add .
git commit -am "first commit"
git push heroku master

pushに失敗したら下のコマンドを実行し、再度push

heroku config:set DISABLE_COLLECTSTATIC=1

https://chart-page.herokuapp.com/drawapp/templates/
にアクセスし、chart.pngが表示されることを確認


以上