2016-10-08 10 views
0

私は2つのアプリケーションファクトリ関数を持っています.1つは "customer"アプリを作成し、もう1つは "admin"バックエンドアプリを作成します。両方のファクトリ関数は基本的にはhere - フラスコのアプリケーションを作成し、いくつかの拡張機能を登録してから、いくつかの青写真(url_prefixを付けて)を追加します。私は下からcreate_combined_app()経由で2つのアプリケーションを一緒に接着します。 Flask-ScriptのManagerで登録した関数の戻り値です。DispatcherMiddlewareを使ったwsgi_app FlaskアプリのURL

def create_combined_app(config_name): 
    customer_app = create_customer_app(config_name) 
    admin_app = create_admin_app(config_name) 

    from werkzeug.wsgi import DispatcherMiddleware 

    customer_app.wsgi_app = DispatcherMiddleware(customer_app.wsgi_app, { 
     '/admin': admin_app 
    }) 

    return customer_app 

これが私の方法です。

私のアプリのすべてのGETルートを取得してロードすることを含むいくつかのテストを行いたいと思います。私はhereの例に従っていますが、というお客様のアプリのURLのみを表示し、の管理者バックエンドのURLは表示されません。

@main.route("/site-map") 
def site_map(): 
    from flask import current_app, jsonify 
    links = [] 
    app = current_app 
    for rule in app.url_map.iter_rules(): 
     if "GET" in rule.methods and has_no_empty_params(rule): 
      url = url_for(rule.endpoint, **(rule.defaults or {})) 
      links.append((url, rule.endpoint)) 
    return jsonify(links) 

私は、ブラウザからアクセスしようとすると、管理者のバックエンドは動作します - それはすべてのI /サイトマップを呼び出すとき、私は管理者のURLが表示されていないことを除いて、うまく動作します。

ありがとうございます! :)

答えて

0

だと思います。DispatcherMiddleware別々のアプリケーションを作成します。つまり、customer_appとadmin_appを作成したということです。それらの2人はスタンドアローンとして生きています。彼らはお互いを知らないので、current_appは単にshow customer_appです。ここで

をフラスコhttp://flask.pocoo.org/docs/0.12/patterns/appdispatch/

enter image description here

から説明しています
関連する問題