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

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


person sw00    schedule 22.09.2011    source источник


Ответы (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).

person Sean Vieira    schedule 24.09.2011