サイトのさまざまなセクションに対応するさまざまなサブドメインのポータルとして、トップレベルドメインを使用したいと考えています。テンプレートexample.com
にルーティングする必要があります。サイトの「卵」サブセクションまたはアプリケーションにルーティングする必要があります。Flaskでこれをどのように達成しますか?welcome.html
eggs.example.com
1 に答える
@app.route()
subdomain
ルートが一致するサブドメインを指定する引数を取ります。Blueprint
またsubdomain
、ブループリント内のすべてのルートにサブドメインマッチングを設定するための引数を取ります。
app.config['SERVER_NAME']
Flaskが何と照合するかを認識できるように、ベースドメインに設定する必要があります。アプリがポート80または443で実行されている場合(つまり、本番環境で実行されている場合)を除き、ポートも指定する必要があります。
subdomain_matching=True
Flask 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によってすでに十分にドキュメント化されているため)。