@app.route()
принимает аргумент subdomain
, чтобы указать, на каком поддомене сопоставляется маршрут.Blueprint
также принимает аргумент subdomain
для установки соответствия поддоменов для всех маршрутов в проекте.
Вы должны установить app.config['SERVER_NAME']
для базового домена, чтобы Flask знал, с чем сопоставлять,Вам также нужно будет указать порт, если ваше приложение не работает на порте 80 или 443. (т.е. в рабочем состоянии).
Начиная с Flask 1.0, вы также должны установить subdomain_matching=True
при создании объекта приложения.
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)
При локальном запуске вам необходимо отредактировать файл hosts вашего компьютера (/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, чтобы субдомены направлялись к тому же хосту, что и базовое имя, и настраивали веб-сервер для маршрутизации всех этих имен в приложение.
Помните, что все маршруты Flask действительно являются экземплярами werkzeug.routing.Rule
.Консультирование в документации Werkzeug по Rule
покажет вам довольно много вещей, которые могут сделать маршруты, которые затушевывают документацию Flask (поскольку она уже хорошо документирована Werkzeug).