17

サイトのさまざまなセクションに対応するさまざまなサブドメインのポータルとして、トップレベルドメインを使用したいと考えています。テンプレートexample.comにルーティングする必要があります。サイトの「卵」サブセクションまたはアプリケーションにルーティングする必要があります。Flaskでこれをどのように達成しますか?welcome.htmleggs.example.com

4

1 に答える 1

37

@app.route()subdomainルートが一致するサブドメインを指定する引数を取ります。Blueprintまたsubdomain、ブループリント内のすべてのルートにサブドメインマッチングを設定するための引数を取ります。

app.config['SERVER_NAME']Flaskが何と照合するかを認識できるように、ベースドメインに設定する必要があります。アプリがポート80または443で実行されている場合(つまり、本番環境で実行されている場合)を除き、ポートも指定する必要があります。

subdomain_matching=TrueFlask 1.0以降では、アプリオブジェクトを作成するときにも設定する必要があります。

from flask import Flask

app = Flask(__name__, subdomain_matching=True)
app.config['SERVER_NAME'] = "example.com:5000"

@app.route("/")
def index():
    return "example.com"

@app.route("/", subdomain="eggs")
def egg_index():
    return "eggs.example.com"
ham = Blueprint("ham", __name__, subdomain="ham")

@ham.route("/")
def index():
    return "ham.example.com"

app.register_blueprint(ham)

ローカルで実行する場合/etc/hosts、ドメインは実際にはローカルに存在しないため、サブドメインのルーティング方法がわかるように、コンピューターのホストファイル(Unix上)を編集する必要があります。

127.0.0.1 localhost example.com eggs.example.com ham.example.com

ブラウザでポートを指定することを忘れないでください、、http://example.com:5000などhttp://eggs.example.com:5000

同様に、本番環境にデプロイする場合は、サブドメインがベース名と同じホストにルーティングされるようにDNSを構成し、それらすべての名前をアプリにルーティングするようにWebサーバーを構成する必要があります。

すべてのFlaskルートは実際にはのインスタンスであることを忘れないでくださいwerkzeug.routing.Rule。WerkzeugのドキュメントをRule参照すると、Flaskのドキュメントが覆い隠しているルートで実行できることがかなり多くわかります(Werkzeugによってすでに十分にドキュメント化されているため)。

于 2011-09-24T03:02:04.830 に答える