2

この回答で説明されているように、Flask アプリケーションで変数ルート処理をセットアップしようとしています: Web アプリでの動的サブドメイン処理 (Flask)

ただし、変数ルートによってキャッチされる前に特定のサブドメインを認識できるようにしたいので、flask-restful api 拡張機能 ( Routing with RESTful ) を使用できます。

たとえば、次のことを試しました。

@app.route('/', subdomain="<user>", defaults={'path':''})
@app.route('/<path:path>', subdomain="<user>")
def user_profile(user,path):
    pass

class Api(restful.Resource):
    def get(self):
        #Do Api things.

api.add_resource(Api, '/v1', subdomain="api")

これをテストすると、すべての URL が変数ルート ハンドラに移動し、user_prof(). @app.routeAPIルートを先に、標準ルールを2番目に、その逆も試してみましたが、変化はありませんでした。

これを実現するには、他のパラメーターが不足していますか、それとも Flask をさらに深くする必要がありますか?

アップデート:

一致させようとしている URL パターンは次のとおりです。

user1.mysite.com -> handled by user_profile()
user2.mysite.com -> handled by user_profile()
any_future_string.mysite.com -> handled by user_profile()
api.mysite.com/v1 -> handled by Api class

その他のケースは次のとおりです。

www.mysite.com -> handled by index_display()
mysite.com -> handled by index_display()
4

2 に答える 2

2
@app.before_request
def before_request():
    if 'api' == request.host[:-len(app.config['SERVER_NAME'])].rstrip('.'):
        redirect(url_for('api'))


@app.route('/', defaults={'path': ''}, subdomain='api')
@app.route('/<path:path>', subdomain='api')
def api(path):
    return "hello"

これはうまくいくはずです。必要に応じて、または API クラスによって処理される可能性がある場合は、API バージョンをパスに追加します。

于 2013-05-30T15:27:41.200 に答える
0

シンプルにするために、アプリケーションのロジックを 2 つの異なる部分に再設計しました。

このようにして、Flask アプリケーションは API エンドポイント ロジックのみを処理します。ユーザー プロファイル ロジックは、別のアプリケーションによって処理されます。ルーティングの中断を心配することなく、API アプリケーションに複数のリソースを追加できるようになりました。

于 2013-10-09T11:43:46.817 に答える