Python+Django REST Frameworkで作ったAPIをHerokuにデプロイしてみた

Django-toolbeltのインストール

https://pypi.org/project/django-toolbelt/

pip install django-toolbelt

requirements.txt

DBの設定切替

pip freeze > requirements.txt 

Django REST Frameworkはデフォルトではsqlite3を使うようになっていますが、Herokuではsqlite3が使用できません。
HerokuはPostgresが使えるので、そのための設定をしていきます。

wsgi.pyの編集

import os
from dj_static import Cling
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

application = Cling(get_wsgi_application())

settings.py

ALLOWED_HOSTS = ['*']

Procfile

プロジェクトフォルダの直下に置きます。(manage.pyと同階層)

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

runtime.txt

これもプロジェクトフォルダの直下に置きます。

python-3.9.1

Herokuへのデプロイ

heroku git:remote -a myapp-2022-1
git add .
git commit -am "initial commit"
git push heroku master

デプロイが正常に完了したらマイグレーションを実行します。

heroku run python manage.py migrate
heroku run python manage.py createsuperuser

settingsを切り替えるようにした際に参考した情報

https://qiita.com/ukisoft/items/8912d0a66151609d9ff9

以下のようにherokuに登録

heroku config:set DJANGO_SETTINGS_MODULE=myapi.settings.production

デプロイすると管理サイトのCSSが崩れる

以下の情報を参考に解決。

https://stackoverflow.com/questions/56352489/what-does-django-staticsettings-static-url-document-root-settings-static-root

STATIC_ROOT = str(BASE_DIR) + "/" + "static"
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('api.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)