Django 4系も安定版の4.2が出ましたね。そろそろ3系からアップデートしようと思いアップデートしました。
その時に仕様変更でエラーが出た箇所をまとめました。
これからDjango 3系から4系へのアップデートを検討されている方の参考になれば幸いです。
CSRF_TRUSTED_ORIGINSを追加
Django4系からはCSRF_TRUSTED_ORIGINS
を設定しないとPOSTした時に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系へのアップデートでエラーが出たり、今からアップデートを考えている方の参考になれば幸いです。この他にも変更点があれば追記します。
コメントを残す