Приложение Flask, которое маршрутизирует на основе поддомена

Я хочу иметь свой домен верхнего уровня в качестве портала для различных поддоменов, которые соответствуют различным разделам моего сайта. example.com должен маршрут до welcome.html шаблон. eggs.example.com следует направить в подраздел" яйца " или приложение сайта. Как я добьюсь этого во фляжке?

1 ответов


@app.route() принимает subdomain аргумент, чтобы указать, какой поддомен соответствует маршруту. Blueprint занимает subdomain аргумент для установки соответствия поддоменов для всех маршрутов в схеме.

необходимо указать app.config['SERVER_NAME'] к базовому домену, чтобы колба знала, с чем сравнивать.

начиная с колбы 1.0 вы также должны установить subdomain_matching=True при создании объекта приложения.

from flask import Flask

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

@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, etc.

аналогично, при развертывании на производстве вам нужно настроить DNS так, чтобы поддомены маршрутизировались на тот же хост, что и базовое имя, и настроить веб-сервер для маршрутизации всех этих имен на приложение.

помните, что все маршруты колбы действительно являются экземплярами werkzeug.routing.Rule. Консультации документация Werkzeug для Rule покажет вам довольно много вещей, которые маршруты могут сделать, что документация колбы глоссы (так как она уже хорошо документирована Werkzeug).