私のWSGIアプリケーションはSQLAlchemyを使用しています。リクエストの開始時にセッションを開始し、ダーティでリクエストの処理が正常に終了した場合はセッションをコミットし、それ以外の場合はロールバックします。したがって、Djangoの動作を実装する必要がありTransactionMiddleware
ます。
したがって、WSGIミドルウェアを作成し、次のものを作成する必要があると思います。
- 前処理でDBセッションを作成して追加します
environ
。 - エラーが発生しなかった場合は、からDBセッションを取得し、後処理
environ
を呼び出します。commit()
- エラーが発生した場合は、からDBセッションを取得し、後処理
environ
を呼び出します。rollback()
ステップ1は私には明らかです:
class DbSessionMiddleware:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['db_session'] = create_session()
return self.app(environ, start_response)
ステップ2と3-ではありません。後処理タスクの例を見つけました:
class Caseless:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
for chunk in self.app(environ, start_response):
yield chunk.lower()
コメントが含まれています:
この
__call__
関数はPythonジェネレーターであり、この種の「後処理」タスクで一般的であることに注意してください。
それがどのように機能し、どのように私の問題を同様に解決できるかを明確にしていただけませんか。
ありがとう、ボリス。