私は2つの異なるエンドポイントに1つの青写真をマウントしたFlaskアプリケーションを構築しています(もう1つは別のエイリアスです)。私は、ルート方法で/old_ep
または/new_ep
一部まで、要求の実際のURLを取得できますかFlask:現在の青写真ウェブルートを取得
app = Flask(__name__)
app.config.update(config['flask'])
app.register_blueprint(ldp, url_prefix='/new_ep')
# Legacy endpoint. @TODO Deprecate.
app.register_blueprint(ldp, url_prefix='/old_ep')
:私のメインサーバーコードで
ldp = Blueprint('ldp', __name__)
@ldp.route('/<path:uuid>', methods=['GET'])
@ldp.route('/', defaults={'uuid': None}, methods=['GET'],
strict_slashes=False)
def get_resource(uuid):
# Route code...
:私の青写真クラスで
、例えばhttp://localhost:5000/new_ep
?
これまでのところ私は
request.host_url + request.path.split('/')[1]
を使用しているが、それは非常に洗練さと、おそらくエラーが発生しやすい見えます。可能であれば、青写真設定からの情報を使用したいと思います。
ありがとうございました。
EDIT:私は
current_app.blueprints[request.blueprint]
でリクエストの中から青写真インスタンスに得ることができると私は青写真を登録するとき、私は設定url_prefix
属性があったことを願っていたが、それは代わりにNone
です。おそらく関連するiter_blueprints()
メソッドのdocumentationから読んだように、これらの青写真は、何回登録されたか、何回パラメータが登録されたかに関わらず、明らかに列挙されています。残念な。ここで
使用オフに基づいて2つの異なる名前を取得するには、完全な実施例であるとそれに応じてインスタンス化する。 'old_ep'に対して' app.register_blueprint(oldep、url_prefix = '/ old_ep') 'と' oldep = Blueprint( "oldep"、__name__)を実行し、 'app.register_blueprint()'で置き換えて 'new_ep ' 。 'oldep.route( '/'、methods = ['GET'])'は 'http:// localhost:5000/old_ep'にルーティングします。 – GeekSambhu
あなたが探している答えではありませんが、URLのデフォルトを使ってこの問題を解決できます。https://github.com/pallets/flask/issues/612#issuecomment-15464107 –
@GeekSambhu非常に複雑なコード変更のようです。私が理解すれば、私は青写真のすべてのルートを2倍にしなければならないでしょう。もしエンドポイントが最終的に非難されたら、私はそれらを削除しなければなりませんか?その時点で、現在のソリューションは、まばゆいですが、1ライナーに過ぎません。 – user3758232