ミドルウェアの設定

ミドルウェアとは、Webアプリケーションの一部を構成するソフトウェアコンポーネントであり、リクエストを受け取って必要な処理を行いレスポンスを返すことができます。

Pythonエージェントは、Contrastがサポートする全てのフレームワークのミドルウェアとして実装されます。Pythonエージェントを使用するには、アプリケーションで使用しているフレームワークのミドルウェアを設定する必要があります。

Bottle

ContrastのBottleミドルウェアは、Bottleアプリケーションのインスタンスをラッピングすることによって動作するWSGIミドルウェアです。

BottleでPythonエージェントを設定するには:

  1. アプリケーションのコードベースで、Bottleアプリケーションのオブジェクトを検索します。これは、bottle.Bottleのインスタンスになります。

    以下はサンプルのBottleアプリケーションで、appはお使いのBottleアプリケーションのオブジェクトになります。

    from bottle import Bottle, run
    
    app = Bottle(__name__)
    
    @app.route("/")
    def index():    
        return "hello world"
    
    <InstallContrastHere>
    
    run(app)
  2. BottleアプリケーションのオブジェクトをContrastのミドルウェアでラップします。上記の例では、<InstallContrastHere>を次のように置き換えます。

    from contrast.bottle import ContrastMiddleware
    app = ContrastMiddleware(app)

注記

BottleアプリケーションでContrast以外のミドルウェアを使用している場合、特定の機能を動作させるためには、最初に初期化するミドルウェアをContrastにする必要があります。

Django

旧設定手順:Contrast Pythonエージェントのバージョン5.0.0以降でこの手順は利用できなくなります

Djangoミドルウェアの設定は、settings.pyファイルで行います。

  1. settings.pyファイルを検索してください。このファイルは、すべてのアプリケーションで同じ場所にあるわけではありませんが、通常はアプリケーションソースツリーの最上部などにあります。一般的な場所は次のとおりです。

    • /settings.py

    • config/settings.py

    • app/settings.py

    注記

    ソースツリーでsettings.pyを検索する場合は、Pythonの仮想環境に該当するディレクトリは必ず除外してください。

    アプリケーションによって、複数のsettings.pyファイルが存在し、さまざまなアプリケーション構成(例えば、本番環境やテスト環境など)に対応している場合があります。そのような場合は、Contrastエージェントのミドルウェアを使用する全ての設定に追加してください。

  2. Contrastエージェントモジュールをリストに追加してください。

    Contrastミドルウェアを可能な限りリストの最初の方に追加してください。ただし、状況によって、アプリケーションを動作させるために順序の変更が必要になる場合があります。

    • Django 1.10以降: 配列になっているMIDDLEWAREという設定変数を検索します。リストにContrastエージェントモジュールを追加します。

      MIDDLEWARE = [
        'contrast.agent.middlewares.django_middleware.DjangoMiddleware',
        # OTHER MIDDLEWARE,
      ]
    • Django 1.6から1.9: settings.pyMIDDLEWARE_CLASSESという設定変数を検索し、リストにContrastエージェントモジュールを追加します。

      MIDDLEWARE_CLASSES = [
        'contrast.agent.middlewares.legacy_django_middleware.DjangoMiddleware',
        # OTHER MIDDLEWARE
      ]

    ミドルウェアの組み込みの詳細については、Djangoのドキュメントを参照してください。

新設定手順:Contrast Pythonエージェントのバージョン4.6.0以降でこの手順を利用できます

ContrastのDjangoミドルウェアはWSGIミドルウェアであり、Djangoスタイルのミドルウェアではありません。

  1. WSGIアプリケーションのオブジェクトを検索します。WSGI_APPLICATIONというDjangoの設定オプションはプロジェクトのWSGIアプリを指し、多くの場合wsgi.pyにあります。

    以下はサンプルのwsgi.pyで、applicationはお使いのWSGIアプリケーションのオブジェクトになります。

    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    
    <InstallContrastHere>
  2. WSGIアプリケーションのオブジェクトをContrastのミドルウェアでラップします。上記の例では、<InstallContrastHere>を次のように置き換えます。

    from contrast.django import ContrastMiddleware
    application = ContrastMiddleware(application)

Falcon

ContrastのFalconミドルウェアはWSGIミドルウェアであり、Falconスタイルのミドルウェアではありません。

  1. Falconアプリケーションのオブジェクトを検索します。これは、Falconのバージョンによって、falcon.APIまたはfalcon.Appのインスタンスとなります。

    以下はサンプルのFalconアプリケーションで、appはお使いのFalconアプリケーションのオブジェクトになります。

    import falcon
    from views import Home
    
    app = falcon.API()
    
    home = Home()
    app.add_route('/home', home)
    
    <InstallContrastHere>
  2. FalconアプリケーションのオブジェクトをContrastのミドルウェアでラップします。上記の例では、<InstallContrastHere>を次のように置き換えます。

    from contrast.falcon import ContrastMiddleware
    app = ContrastMiddleware(app)

    重要

    Contrastのミドルウェアは、アプリケーションに適用される最初のWSGIミドルウェアでなければなりません。

    重要

    ルート登録が完了、Falconインスタンスをラップする必要があります。

Flask

ContrastのFlaskは、Flaskアプリケーションのインスタンスをラッピングすることによって動作するWSGIミドルウェアです。

  1. Flaskアプリケーションのオブジェクトを検索します。これは、flask.Flaskのインスタンスになります。

    以下はサンプルのFlaskアプリケーションで、appはお使いのFlaskアプリケーションのオブジェクトになります。

    import Flask
    
    app = Flask(__name__)
    
    <InstallContrastHere>
    
    @app.route('/')
    def index():
        return render_template('index.html')
    
    app.run(...) 
    
  2. FlaskアプリケーションのオブジェクトをContrastのミドルウェアでラップします。上記の例では、<InstallContrastHere>を次のように置き換えます。

    from contrast.flask import ContrastMiddleware
    app.wsgi_app = ContrastMiddleware(app)

    注記

    ContrastのFlaskミドルウェアはflask.Flask.wsgi_appではなく、flask.Flaskのインスタンスを引数として必要とします。

Pyramid

旧設定手順:Contrast Pythonエージェントのバージョン5.0.0以降でこの手順は利用できなくなります

Pyramidでは、ミドルウェアは「tween」と呼ばれています。

  1. アプリケーションのコードベースで、Configuratorオブジェクトを検索します。例えば、次のようなものです。

    from pyramid.config import Configurator
    config = Configurator()
    
    <InstallContrastHere>
  2. Contrastのミドルウェアを設定に追加します。上記の例では、<InstallContrastHere>を次のように置き換えます。

    config.add_tween('contrast.agent.middlewares.pyramid_middleware.PyramidMiddleware')

    tweenの設定に関する詳細については、Pyramidのドキュメントを参照してください。

新設定手順:Contrast Pythonエージェントのバージョン4.6.0以降でこの手順を利用できます

ContrastのPyramidミドルウェアはWSGIミドルウェアであり、Pyramidスタイルの「tween」ではありません。

  1. WSGIアプリケーションのオブジェクトを検索します。これは、多くの場合Configurator.make_wsgi_app()への呼び出しによって作成されます。

    例えば、以下のようになります。

    from pyramid.config import Configurator
    
    config = Configurator()
    app = config.make_wsgi_app()
    
    <InstallContrastHere>
  2. WSGIアプリケーションのオブジェクトをContrastのミドルウェアでラップします。上記の例では、<InstallContrastHere>を次のように置き換えます。

    from contrast.pyramid import ContrastMiddleware
    app = ContrastMiddleware(app)

    重要

    まれに、アプリケーションのレジストリ(Registry)オブジェクトもミドルウェアに渡す必要がある場合があります。レジストリは通常、ConfiguratorインスタンスとPyramidアプリケーションオブジェクトの両方の属性として利用できます。

    アプリケーションが起動しない場合は、アプリケーションのレジストリを検索し、Contrastのミドルウェアに渡します。以下は、その例です。

    app = ContrastMiddleware(app, config.registry)

WSGI

Contrastは、エージェントのコア機能を全て含む汎用のWSGIミドルウェアを提供しています。 ルート探索などのフレームワーク固有の機能は、汎用のWSGIミドルウェアには実装されていません。

Contrastを使用してWSGI準拠のアプリケーションを検査するには:

  1. アプリケーションのコードベースで、WSGIアプリケーションのオブジェクトを検索します。例えば、次のように作成されたWSGIアプリケーションがあるとします。

    from example.module import make_app
    wsgi_app = make_app() 
    
    <InstallContrastHere>
  2. WSGIアプリケーションのオブジェクトをContrastのミドルウェアでラップします。上記の例では、<InstallContrastHere>を次のように置き換えます。

    from contrast.wsgi import ContrastMiddleware
    wsgi_app = ContrastMiddleware(wsgi_app)

WSGIミドルウェアの詳細については、WSGIの仕様を参照してください。