4
3

More than 5 years have passed since last update.

古いDjangoで書かれたものをVersionUpする。

Last updated at Posted at 2018-02-07

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に変わる。

こちらを参考にさせていただきました。
https://www.monotalk.xyz/blog/django-18%E3%81%8B%E3%82%89settingspy%E3%81%AEtemplates%E3%81%8C%E9%9D%9E%E6%8E%A8%E5%A5%A8%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E8%AD%A6%E5%91%8A%E3%81%8C%E5%87%BA%E5%8A%9B%E3%81%95%E3%82%8C%E3%82%8B/

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),

4
3
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
4
3