15
12

More than 5 years have passed since last update.

1週間かけてゼロからDjangoでポートフォリオを作った話

Posted at

初めての投稿になりますので、説明不足なところやお作法的なアドバイスがあれば、ビシバシご指摘下さい…!

何を作ったの?

簡単な報告書共有サイトを作成しました。なんとかデプロイまで漕ぎ着けましたので、
お時間のある方は以下からご確認下さい。
https://djangosht.herokuapp.com
https://github.com/shuto-hub/my-first-blog

実装した技術

  • CRUD(一部機能はsuperuserのみ実行可)
  • ユーザー登録機能
  • 評価機能とイケてる評価ページ(しょぼい)
  • ページネーション
  • herokuへのデプロイ(gunicornの導入)

学習プロセス

pythonの超基本的な使い方の勉強も含めると、デプロイまで1週間はかかりました。
Ruby(rails)をちょっと触った経験がある程度のど素人です。
とにかくコードを書きたかったため、教本等は購入せず、以下のサイトを参考に学習を進めました。

djangogirlsチュートリアル

めちゃくちゃ分かりやすいです!pythonを触っている感覚は少し薄いですが、取っ付きやすさは最高でした。以前はherokuでのデプロイ方法が記載されていたそうですが、今はpythonanywhereでのデプロイ方法に変わっており、より簡単にサイトを公開できるようになっております。

ユーザー登録機能の実装時に参考にさせて頂いた記事

https://sinyblog.com/django/user_session/
→railsでいうdeviseジェムのような魔法の機能は存在しないため、ここで早くも詰みそうになりましたが、こちらを参考になんとか実装しました!

Herokuへのデプロイでハマってしまった(server error 500)

今回はpythonanywhereではなく、herokuでのデプロイを行いました。
色々な記事を参考に、下記の通り設定を行ったのですが、(local_settingsも設定済み)
アクセスしてもserver error 500が返ってくる状態が続き、どうにもならない状況が丸一日ありました…

mysite/settings.rb

import os
import dj_database_url

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# デバッグモードの無効化とWhitenoiseの適用
DEBUG = False

ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com']

INSTALLED_APPS = [
    'whitenoise.runserver_nostatic',
    'accounts.apps.AccountsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
    'widget_tweaks',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    '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',
]

# ~中略~

# postgresqlの記述

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'name',
        'USER': 'user',
        'PASSWORD': '',
        'HOST': 'host',
        'PORT': '',
    }
}

#~中略~

# staticfileの位置と、ローカル環境でのsettingを分岐させる記述

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'

try:
    from .local_settings import *
except ImportError:
    pass

if not DEBUG:
    SECRET_KEY = os.environ['SECRET_KEY']
    import django_heroku
    django_heroku.settings(locals())

db_from_env = dj_database_url.config(conn_max_age=600, ssl_require=True)
DATABASES['default'].update(db_from_env)

後になって解消したのですが、どうやら過去にDEBUG = Trueでデプロイした場合、Falseにしてもエラーが解消されないそうなのです。
HerokuのSettingsでDeleteAppを行い、再度デプロイを行ったところ、上記設定で無事動きました。
https://yaruki-strong-zero.hatenablog.jp/entry/2018/05/27/fix_django_heroku_debug_false_servererror500/
エラーの解消にはこちらを参考にさせていただきました!

分かったこと

  • Ruby on rails等と比較して、ブラックボックスになっている処理が少なめで、理解しながら書ける
  • それでも簡単に機能実装できている感覚はあるので、便利!
  • Pythonのライブラリ使ってなくね?が使える!

今後はライブラリを使用したそれっぽいアプリケーションを作っていきます!
学習のアドバイス等頂ければ大変嬉しいです…!

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12