Приложение Flask, которое маршрутизирует на основе поддоменов - PullRequest
12 голосов
/ 22 сентября 2011

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

1 Ответ

29 голосов
/ 24 сентября 2011

@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).

...