Django 1.6のリリースをご覧ください

ジャンゴ

こんにちは、habralyudi。 昨日、人気のあるPythonのWebフレームワークであるDjangoのブログで、1.6という新しいバージョンのリリースに関するニュースがありました。

すべての革新の完全なリスト、および変更に関する情報(後方互換性のないものも含む)は、リリースノートに伝統的に記載されています 。 私の考えでは、今回は開発者がデータベースの操作に重点を置いていました。

このニュース記事では、私の意見では、主な変更点に注目したいと思います。

トランザクションを操作する


1.6では、トランザクションを操作するための新しいAPIが登場しました。 このバージョンから、 django.db.transactionあるdjango.db.transactionモジュールのautocommit()commit_on_success()およびcommit_manually()関数django.db.transaction廃止されたと見なされ、1.8まで互換性を維持します。 それらはatomic()置き換えられます。

ここでの主なロジックは次のとおりです:以前、キーポイントはトランザクションコミットを操作するときの動作制御メカニズムでした-自動コミット(つまり、各SQLクエリはトランザクションを開始して自動的にコミットします)または手動コミット( COMMIT; SQLクエリは独立して送信されます) このメカニズムは、独立したトランザクションの場合は非常にうまく機能しましたが、廃止された関数をネストして使用する場合、結果は不正確になる可能性があります。 たとえば、2つのcommit_on_success()ブロックが相互にネストされている場合、内部ブロックの実行結果がトランザクションの観点から外部ブロックのアトミック性を壊してしまいます。

これから何が起こるか:最初に、jungaはデフォルトで自動コミットモードをオンにします。これはPEP 249に違反して、注目に値します。 次に、トランザクションを操作するための唯一のメカニズムはatomic() 。これはネストを恐れません。 外部ブロックの場合はトランザクションで動作し、ネストされたブロックの場合はSQLストレージポイントで動作します。 また、 TransactionMiddleware代わりに、構成定数ATOMIC_REQUESTS 。その値をTrue (デフォルト値はFalse )に設定すると、djangoは1つのトランザクションで1つのHTTP要求を処理しようとします。 つまり 要求は問題なく実行されました-コミット済み、いいえ-ロールバックされました。

atomic()は、デコレータまたはコンテキストマネージャとして使用できることに注意してください。

 from django.db import transaction #  @transaction.atomic def viewfunc1(request): #       do_stuff() and as a context manager: #   def viewfunc2(request): #       do_stuff() with transaction.atomic(): #       do_more_stuff() 


より詳細な説明は、いつものように、ドキュメントで利用可能です。

永続的なデータベース接続


もちろん、これはプル接続ではありません。 これらは、アプリケーションが実行されているスレッドによって分離されます。 ただし、これは、パフォーマンスの点で、すべてのHTTP要求でデータベースに常時接続するよりもはるかに優れています。 接続の存続期間は、構成定数CONN_MAX_AGEによって制御されます。

テスト


1.6では、新しいdjango.test.runner.DiscoverRunnerテストdjango.test.runner.DiscoverRunner 。これは、 unittest2からのテストでモジュール検索ロジックを使用しunittest2 。 これで、テストを含むファイルの名前がtest*.pyマスクと一致する場合、テストを任意のモジュールに配置できます。

ただし、同時に、 models.pyおよびtests/__init__.pyからのtests/__init__.pyが見つかったため、それらは起動されません(以前のバージョンの動作とは異なります)。 最も簡単な解決策は、それらの名前をtest_models.pytests/test.pyなどに変更することです。 また、ドキュメントは自動的にロードされなくなります。 しかし、 unittestドキュメントの指示に従ってそれらを元に戻すことは難しくありません。

ところで、管理チームの./manage.py testには--patternオプションがあり、テストでファイルを検索するためにマスクを変更できることを指定します。

経営陣チェック


django-admin.py checkコマンドを使用すると、プロジェクトまたはアプリケーションと現在のバージョンのジャングルとの互換性を確認できるようになり、互換性のない場所が見つかった場合にアラートが表示されます。 このコマンドは、フレームワークの新しいバージョンへの移行に役立つと想定されています。

ちなみに、1.6はジャングルの最新リリースであり、Pythonバージョン2.6を引き続きサポートしています。 次のリリースから、少なくとも2.7のPythonが必要になります。

ORMの改善


QuerySetは、 first()およびlast()メソッドの形式の構文シュガー、およびlatest()に加えてearliest()メソッドをサポートするようになりました。

ORMは、日付や時刻を持つフィールドを検索するときに、以前に追加されたyearmonth dayに加えて、 hourminute secondをサポートするようになりました。

まあ、伝統的な調査。 割合に関心があるため、複数のバージョンを使用する場合は、メインの開発が行われているバージョンを示すのが理にかなっています。

Source: https://habr.com/ru/post/J201168/


All Articles