Django 4系への移行で変更が必要なポイント

Django 4系も安定版の4.2が出ましたね。そろそろ3系からアップデートしようと思いアップデートしました。

その時に仕様変更でエラーが出た箇所をまとめました。

これからDjango 3系から4系へのアップデートを検討されている方の参考になれば幸いです。

Django 3系いつまで

CSRF_TRUSTED_ORIGINSを追加

Django4系からはCSRF_TRUSTED_ORIGINSを設定しないとPOSTした時に403エラーが出るようになりました。

403エラー

この問題を解決するためにはALLOWED_HOSTSに登録しているドメインにプロトコルを追加して登録します。

ALLOWED_HOSTS = [ "example.com" ]
CSRF_TRUSTED_ORIGINS = [ "https://example.com" ] ←追加

開発環境で403エラーが出ずに、本番環境だけでエラーが発生したので焦りました(;´Д`)

ugettext_lazyからgettext_lazyへの変更

Django 4.0では、ugettext_lazyが非推奨となり、代わりにgettext_lazyを使用するように変更されています。この変更に対応するためには、ugettext_lazyをインポートしている箇所をgettext_lazyに置き換えるだけです。

from django.utils.translation import ugettext_lazy

from django.utils.translation import gettext_lazy

ugettext_lazy は3系で非推奨、4系で廃止。

なので、多くの人はすでに使っていないかもしれません。

MemcachedCacheバックエンドのパッケージ変更

Django 3.2から、Memcachedキャッシュバックエンドが別のパッケージに移動されています。この変更に対応するために、django-memcachedパッケージをインストールし、設定ファイルで新しいバックエンドの場所を指定します。

この設定は、Memcachedを使っている場合に限ります。

pip install django-memcached
'django.core.cache.backends.memcached.MemcachedCache'

'django_memcached.cache.MemcachedCache'

url()からre_path()への移行

Django 2.0以降、url()関数は非推奨となり、代わりにre_path()が導入されました。この変更に対応するためには、url()をインポートしている箇所をre_path()に置き換えます。

from django.conf.urls import url

from django.urls import re_path

それから、urls.py内のurl()関数の使用箇所をre_path()に変更します。

url(r'^some_pattern/$', some_view)

re_path(r'^some_pattern/$', some_view)

3系なら普通path()を使っていますけどね💦

まとめ

Django 4系へのアップデートは、以下の3つの変更点があります。

  • CSRF_TRUSTED_ORIGINSを追加
  • ugettext_lazyからgettext_lazyへの変更
  • MemcachedCacheバックエンドのパッケージ変更
  • url()からre_path()への移行

メジャーアップデートは久しぶりだったので億劫に感じていましたが、案外すんなり解決できてよかったです。

Django 4系へのアップデートでエラーが出たり、今からアップデートを考えている方の参考になれば幸いです。この他にも変更点があれば追記します。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください