(id:hirokiky)、編集:kenkenDjango2.2で追加される機能、変更点についてご存知ですか?今回はDjango最新バージョンの、Django2.2について紹介します。すべての機能や変更を細かく紹介すると長くなるので、この記事では、Django2.2で追加される機能のメインとなるConstraintsに焦点をあてて説明します。このほかにも、いくつか気になる機能をピックアップして紹介します。Changes(後方互換製のない変更)に十分注意してください。モデルの値をデータベースで制限する機能モデルの各フィールドの値に、データベースレベルでの制限を付けられる機能が追加されました。以下のようにMetaオプションを追加することで制限をかけられます。この例では下記の例に出てくるageフィールドに「18以上の値でなければならない」という制限を付けています。models.CheckConstraintを使って制限を指定します。check=引数にQオブジェクトを渡すことで、制限の条件を指定できます。UniqueConstraintsも使えますmodels.UniqueConstraintsは一意制約(データの重複を防ぐための制約)をつけるために使います。複数のフィールドを組み合わせた一意制約としたり、ある条件の場合と組み合わせた一意制約を付与できます。Django以下の例では、「下書き(DRAFT)」状態のArticleは1ユーザーに付き1つしか作れないように制限しています。Metaオプションと同じ機能になります。将来的にこのunique_togetherオプションは廃止される予定です。DjangoConstraintsはValidatorsとは違うもの?ConstraintsはValidatorsと別物です。Djangoのバリデーターは値の保存前にアプリケーション側で値をチェックするものです。Constraintsはデーターベース上で制限するものです。Constraintsに反する値を保存しようとすると、IntegrityErrorが発生します。反映されないので、バリデーター(validators引数など)は引き続き設定する必要があります。UniqueConstraintをconditionオプションなしで使う場合はバリデーションのチェックも行ってくれます。Constraintsはどんな悩みを解決するもの?不正な値がデーターベース上へ入らないようにしてくれます。不正な値が入ってしまうと、アプリケーション上で想定しないバグを誘発したり、脆弱性につながるおそれがあります。今まではバリデーターで入力を制限していましたが、こんな悩みがありました。バリデーターにはちゃんと設定しているけど、設定を忘れると怖い。値の安全のためにデーターベースレベルで制限したい連携しているシステムが直接データーベースにアクセスして、良くない値を保存しないか心配Constraintsを設定するとデーターベースレベルで入力を制限してくれるのでより安心です。私個人的にはモデル設計とデータの制限は厳しくしたほうが良いと考えているので、この新機能はかなり嬉しいです。2.2はLTSDjango2.2はLongTermSupport(長期間サポート、LTSとも呼ばれる)になるリリースです。予定ではDjango2系で唯一のLTSになりますので、Django2.2にアップグレードできればひとまずは安心できると思います(2022年4月までサポートされます)。小さめの変更もいくつかピックアップしてご紹介します。すべての変更を網羅しているわけではありませんので、ご注意ください。続いて2つ目の依存パッケージになります今までDjangoは依存パッケージがないことに強いこだわりがありました。cache.get(...)のキーへ文字列以外を渡すとエラーになってしまいましたcacheのキーは今までも文字列の指定が必須でした。2.2はDjango2系で唯一のLTSなので、そこまで実験的な新機能はありません。Constraintsは良い機能ですし、細かい改善も多くされています。今後もDjangoの進化に期待したいところです。Djangoに新機能を提案したい場合や、バグの修正をしたい場合は以下のチュートリアルを参考にしてください。12:12このブログはPyQ開発スタッフが運営しています。技術書1冊分の価格ではじめるPython独学プラットフォームです。Pythonの基本から機械学習・データ分析まで、実際にコードを書きつつブラウザだけで学べます。Pythonお悩み解決で紹介しているような疑問が解決できるプラン(スタンダードプラン)もあるので、プログラミング学習をサポートする先輩プログラマーのような存在が必要になったときには、是非検討してみてくださいね。»Python学習チャンネルPython独学プラットフォームPyQ(パイキュー)の公式ブログです。PyQのリリース情報やカリキュラム紹介だけでなく、プログラミング学習者向けにPythonのQ&A、プログラミング学習tipsなどを配信しています。正式版がリリースされました。reserved.引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。