djangoをdockerコンテナで利用(8) – django3からdjango4にバージョンアップ

◆◆◆

djangoの4.0ってのが先週に出たらしい。

せめてマイナーバージョンが1つ上がって4.1まで待ちたいけど、メジャーバージョンアップの練習してみたい。

この秋あたりから3.2~3.9と使い始めてきて、冬にバージョン上げてdjangoの記述をどんなふうに変えていくのかやってみた。

元のバージョン

djangoはrequirement.txtに必要コンポーネントのバージョンを書いておく。
自分用にパッケージをバージョンアップするためのメモを最初の頃に作ってある。

djangoのロケット画面表示をdockerコンテナで表示させてた頃に手動作成したrequirement.txtはこれだけ。

その後もmariaDB接続と円グラフ描く練習のためだけなので内容は少なかった。

Django==3.2.7
uwsgi==2.0.19.1
django-markdownx==3.0.1
Markdown==3.3.3
Pillow==7.0.0
PyMySQL

バージョン上げる

業務として真面目にやるなら、先にリリースノートを読むべき。

Django
The web framework for perfectionists with deadlines.

でも今は業務じゃなくてプライベートでの練習やし、ドキュメント読むの面倒やし、読まずに問題に当たったとしてもその解決過程を楽しみたいし。

失敗したら、/code/appのフォルダをdockerの永続化領域としてtar.gzで保管してるから丸ごと戻す。

問題が出たらリリースノート読むってことで、いきなりpip実行した。

エコー結果は長いし、アップグレードは「success」ってのしかチェックしないので割愛。

以下、実際にやったこと。

  1. アップデート必要なパッケージ一覧確認(pip3 list -o)で目視確認
  2. エラーが出ないか目視しつつパッケージのアップグレード(pip3 install –upgrade)
  3. パッケージの依存関係チェック(pip3 check)して問題出ないか確認
  4. パッケージの書き出し(pip3 freeze)してバージョン記述の確定内容をrequirement.txtに残す

ここまででrequirement.txtはこうなった。
えらい行数増えてるなぁ。

asgiref==3.4.1
backports.zoneinfo==0.2.1
cycler==0.11.0
Django==4.0
django-markdownx==3.0.1
fonttools==4.28.4
importlib-metadata==4.9.0
kiwisolver==1.3.2
Markdown==3.3.6
matplotlib==3.5.1
numpy==1.21.4
packaging==21.3
Pillow==8.4.0
PyMySQL==1.0.2
pyparsing==3.0.6
python-dateutil==2.8.2
pytz==2021.3
six==1.16.0
sqlparse==0.4.2
supervisor==4.2.2
uWSGI==2.0.20
zipp==3.6.0

バージョン上げたときのdjango処理内の対処

バージョン上げたんやからmigrateする。

今のところ、django内でのアプリケーションはgvisDjango3とgvisWebAppの2つ。
普通に行けばこうなる。

nari@nafslinux-intra-gavann-it-com:/docker$ docker exec -it docker_sv_django_1 bash
root@svdjango:/# cd /code/app
root@svdjango:/code/app# /usr/bin/python3 manage.py makemigrations gvisDjango3
No changes detected in app 'gvisDjango3'
root@svdjango:/code/app# /usr/bin/python3 manage.py migrate gvisDjango3
Operations to perform:
  Apply all migrations: gvisDjango3
Running migrations:
  No migrations to apply.
root@svdjango:/code/app# /usr/bin/python3 manage.py makemigrations gvisWebApp
No changes detected in app 'gvisWebApp'
root@svdjango:/code/app# /usr/bin/python3 manage.py migrate gvisWebApp
Operations to perform:
  Apply all migrations: gvisWebApp
Running migrations:
  No migrations to apply.
root@svdjango:/code/app# exit
exit
nari@nafslinux-intra-gavann-it-com:/docker$ docker-compose restart sv_django
Restarting docker_sv_django_1 ... done
nari@nafslinux-intra-gavann-it-com:/docker$

この出力を得るには2つの修正が必要やった。

django.conf.urlsからurlがなくなった

最初はこんなエラーが出た。

ImportError: cannot import name 'url' from 'django.conf.urls'

調べると、django.conf.urlsはDjango3.1から非推奨、Django4でなくなったらしいので以下の行をurls.pyからカットした。

from django.conf.urls import url

CSRF_TRUSTED_ORIGINSの書式変更

次はまた別のエラーが出た。

root@svdjango:/code/app# /usr/bin/python3 manage.py makemigrations gvisWebApp
SystemCheckError: System check identified some issues:

ERRORS:
?: (4_0.E001) As of Django 4.0, the values in the CSRF_TRUSTED_ORIGINS setting must start with a scheme (usually http:// or https://) but found nafslinux.intra.gavann-it.com:30443. See the release notes for details.
root@svdjango:/code/app#

これはリリースノートに書式変更したって書いてあった。

CSRF_TRUSTED_ORIGINS changes
Format change

Values in the CSRF_TRUSTED_ORIGINS setting must include the scheme (e.g. 'http://' or 'https://') instead of only the hostname.

settings.pyにあるホスト名記述に「http://」か「https://」をつけろってことらしいので、それぞれつけた。

CSRF_TRUSTED_ORIGINS = [
    'https://nafslinux.intra.gavann-it.com:30443',
    'http://nafslinux.intra.gavann-it.com:38080'
]

この2つの対処をしただけで、データベース接続も円グラフ描画もcrudもちゃんと動いてくれた。

django-verup

そういえば今作りかけてるバイナリデータを含むcrudでjpegやpdfもちゃんと表示される。

django-verup

iosとandroidでも表示されるかとかの細かいテストは来週にやるとして、mariaDBへの追加・編集・削除はPCのブラウザから普通にできる。

また今度

次は5.1になったらバージョンアップやってみるかな。

タイトルとURLをコピーしました