Я хочу иметь свой домен верхнего уровня в качестве портала для различных поддоменов, которые соответствуют различным разделам моего сайта. example.com
должен welcome.html
шаблону welcome.html
. eggs.example.com
следует направлять в подраздел "яйца" или приложение сайта. Как бы я достиг этого в Flask?
Приложение Flask, которое маршрутизирует на основе поддоменов
Ответ 1
@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).