年末のdjango-2.0祭り

最終更新日時:2017-12-29 11:52

初版公開日時:2017-12-29 11:52

タグ: diary python


年末の最初の作業は、django-2.0への準備作業で少しずつプログラムを直しています。


対応は以下の感じです。


  • django-1.8とdjnago-1.11の両方に対応していたものを、django-1.8向け互換コードの対応終了を宣言。

  • djnago-1.11で、"python3 -Wd manage.py 0.0.0.0:8000"と起動して、RemovedInDjango20Warningを表示させて、地道に直していく。

  • RemovedInDjango20Warningが消えたら、djnago-1.11で動作確認。

  • djnago-2.0をインストールしてさらなる動作確認。エラーの箇所を直していく。


django-2.0対応で修正したポイントは以下。ちなみにDjango-2.0のリリースノートは こちら


  • models.pyのForeignKeyにon_deleteが必須になったので追加する。

  • User.is_authenticated()が関数のサポートが終了し、プロパティになったためUser.is_authenticatedに変更。

  • MIDDLEWAREで、SessionAuthenticationMiddlewareの指定が不要になったため削除。というか、指定しているとエラーになる。経緯としては、webフレームワークの機能として必須なので常に有効になったということらしい。

  • urls.pyで"include(admin.site.urls)"の部分が単に"admin.site.urls"でよくなった。

  • querysetで 以下のエラーが出たため、軽微な修正 を行った。

    The QuerySet value for an exact lookup must be limited to one result using slicing.

  • mysqlを使っている場合の変更に対応。

    • DATABASESのOPTIONSに、'isolation_level': 'repeatable read'を追加。これはdjango-2.0からすべてのデータベースでread commitedがデフォルト指定になったため。

    • 動かしてみると、ログイン認証の処理でエラーが発生。

      django.db.utils.OperationalError: (1665, 'Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.')

    • my.cnfの設定で、binlog_format = MIXED に変更してエラーが出なくなった。


auther: dictoss

地元の北海道から流れて大阪へ行き、現在は東京でお仕事中。 仕事ではCentOS、家ではDebianとFreeBSDを使い何かしようと画策中。

github.com

最近の更新記事