1.4で書かれてたDjangoのプログラムを今のカタチにアップデートすることにしました。
目標は Django Version 1.4 →1.11 (Python2系の最終版ですかね)
作り直したほうが早いかもしれませんが、細かく丁寧に作られてて同じものを作るのが大変だと思ったため…。
色々悩みすぎて、うろ覚えです…。
環境
ubuntu1604LTS
python2.7.12
django 1.4 -> 1.6
・特に問題なく動いた。(とうろ覚え)
django 1.6 -> 1.7
・そもそも起動しない
→settings.pyにこれを記載したら警告が消えた。
import django
django.setup()
・Southの廃止。
→INSTALLED_APPSからsouthを削除。
・testで警告が出るように鳴った(新しいTest runnerがあるよ。っていう警告みたいです。)
# python manage.py test
Creating test database for alias 'default'...
System check identified some issues:
WARNINGS:
?: (1_6.W001) Some project unittests may not execute as expected.
HINT: Django 1.6 introduced a new default test runner. It looks like this project was generated using Django 1.5 or earlier. You should ensure your tests are all running & behaving as expected. See https://docs.djangoproject.com/en/dev/releases/1.6/#new-test-runner for more information.
System check identified some issues:
→settings.pyにこれを記載したら警告が消えた。
TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
※こちらは1.11では不要な記載になるみたい。
・makemigrateでエラーが出る。
→APPPSのmigrationディレクトリの中のファイルを全て削除。
__init__.py
だけにする。
※以前の履歴でsouthが動いていた場合、makemigrateできないため。
django 1.7 -> 1.8
settings.pyの中の書き方が変わった。
TEMPATE_DIR,TEMPLATE_LOADERSなごが廃止。
TAMPLATEに変わる。
django 1.8 -> 1.9
忘れました…。
django 1.9 -> 1.10
urls.pyやらsettings.pyの書き方が変わった
パラメータの記載が ( )丸括弧
ではなく[ ]
django 1.10 -> 1.11
調査中
Celerydが動かない…。
全てDjangoは新規インストールです。
1.4で稼働中であれば、
pip install -U Django==1.11
でアップデートした場合、Djangoのほうで都合よく解釈してくれてるみたいで、
Settings.pyとかurls.pyは旧式の表記でも動作しました。
djangoはVersion1.7辺りから大幅に変わった印象。
django2.0はPython3.x系なので、知識が浅い自分にはこれ以上Versionを上げる時はすごい苦労しそう。
django 1.11 -> 2.02
DjangoというよりPythonの話かもしれませんが軽くまとめてみます。
Python3系が基本になったのでPython2.7で好意的に解釈されてたものもエラーになったり
色々変わった印象。
①
import commands
が廃止され、
import subprocess
に統合された様子。
②自分で作ったモジュール(スクリプト)をインポートする際の記載が若干変わる。
同階層のスクリプトでも、パスを指定しないとだめになったみたいです。
旧: from cmd_exec import *
↓
新: from . import cmd_exec
こちらでもいけるみたいです。
from .cmd_exec import *
③Print文の書き方は変わりました。
・カッコが必要
旧:print "\n".join(configs)
↓
新:print("\n".join(configs))
・テキストの差し替え?にはformatが推奨されてるらしい。
旧:print 'command execute "%s"' % (hostname)
↓
新:print("command execute {}".format(hostname))
・try~exceptの書き方が若干かわる。
旧: except Exception, exp:
新: except Exception as exp:
③modelsの書き方
・ForeignKeyには on_delete=models.CASCADE
オプションが必要。
platform = models.ForeignKey(
Platform,
blank=False)
↓
platform = models.ForeignKey(
Platform,
blank=False,
on_delete=models.CASCADE,
)
④urls.pyの書き方
adminサイトの書き方が若干かわったみたいです。
旧: url(r'^admin/', include(admin.site.urls)),
↓
新: url(r'^admin/', admin.site.urls),