シェルでの作業
バージョン0.3の新機能。
誰もがPythonを愛する理由の1つは、インタラクティブシェルです。 基本的に、Pythonコマンドをリアルタイムで実行し、すぐに結果を返すことができます。 Flask自体にはインタラクティブシェルが付属していません。事前に特定のセットアップを必要としないため、アプリケーションをインポートして遊んでみてください。
ただし、シェルでのプレイをより快適なものにするための便利なヘルパーがいくつかあります。 インタラクティブコンソールセッションの主な問題は、ブラウザのようにリクエストをトリガーしないことです。つまり、 g 、 request などは使用できません。 しかし、テストしたいコードはそれらに依存するかもしれないので、あなたは何ができるでしょうか?
ここで、いくつかのヘルパー関数が役立ちます。 ただし、これらの関数は、インタラクティブなシェルの使用だけでなく、ユニットテストや偽のリクエストコンテキストを必要とするその他の状況にも使用できることに注意してください。
通常、最初にドキュメントのリクエストコンテキストの章を読むことをお勧めします。
コマンドラインインターフェイス
Flask 0.11以降、シェルを操作するための推奨される方法は、flask shell
コマンドです。これは、これの多くを自動的に実行します。 たとえば、シェルはロードされたアプリケーションコンテキストで自動的に初期化されます。
詳細については、コマンドラインインターフェイスを参照してください。
リクエストコンテキストの作成
シェルから適切なリクエストコンテキストを作成する最も簡単な方法は、test_request_context
メソッドを使用してRequestContext
を作成することです。
>>> ctx = app.test_request_context()
通常、with
ステートメントを使用してこのリクエストオブジェクトをアクティブにしますが、シェルではpush()
およびpop()
メソッドを手動で使用する方が簡単です。
>>> ctx.push()
その時点から、 pop を呼び出すまで、リクエストオブジェクトを操作できます。
>>> ctx.pop()
リクエストの前後に発砲
リクエストコンテキストを作成するだけでは、リクエストの前に通常実行されるコードをまだ実行していません。 これにより、リクエスト前のコールバックでデータベースに接続している場合や、現在のユーザーが g オブジェクトに保存されていない場合などに、データベースが使用できなくなる可能性があります。
ただし、これは自分で簡単に行うことができます。 preprocess_request()
に電話するだけです。
>>> ctx = app.test_request_context()
>>> ctx.push()
>>> app.preprocess_request()
preprocess_request()
関数が応答オブジェクトを返す場合があることに注意してください。その場合は、無視してください。
リクエストをシャットダウンするには、リクエスト後の関数(process_response()
によってトリガーされる)がレスポンスオブジェクトで動作する前に、少しトリックする必要があります。
>>> app.process_response(app.response_class())
<Response 0 bytes [200 OK]>
>>> ctx.pop()
teardown_request()
として登録されている関数は、コンテキストがポップされると自動的に呼び出されます。 したがって、これは、要求コンテキスト(データベース接続など)に必要なリソースを自動的に破棄するのに最適な場所です。
シェルエクスペリエンスのさらなる改善
シェルで実験するというアイデアが好きな場合は、インタラクティブセッションにスターインポートしたいものを含むモジュールを自分で作成してください。 そこでは、データベースの初期化、テーブルの削除など、一般的なことのためのいくつかのヘルパーメソッドを定義することもできます。
それらをモジュール( shelltools など)に入れて、そこからインポートするだけです。
>>> from shelltools import *