Маршруты с пользовательскими доменами с использованием Flask

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

GET-запросы к этому URL-адресу работают должным образом: http://user.example.com:5000/book/12345/

GET-запросы к этому URL-адресу работают должным образом: http://custom.com:5000/book/12345/

Запросы GET на этот URL пытаются выполнить перенаправление, но безуспешно: http://custom.com:5000/book/12345

Flask перенаправляет браузер на этот URL-адрес, который, конечно же, не работает: http://<invalid>.example.com:5000/book/12345/

Есть ли другой способ обработки пользовательских доменов? Вот полный минимальный пример, чтобы воспроизвести это. Я установил custom.com, example.com. и user.example.com, чтобы указать на 127.0.0.1 в моем файле /etc/hosts в моей среде разработки, чтобы Flask получил запрос.

from flask import Flask

app = Flask(__name__)

server = app.config['SERVER_NAME'] = 'example.com:5000'

@app.route('/', subdomain="<subdomain>")
@app.route('/')
def index(subdomain=None):

    return ("index")

@app.route('/book/<book_id>/', subdomain="<subdomain>")
@app.route('/book/<book_id>/')
def posts(post_id, subdomain=None):

    return (book_id)


if __name__ == '__main__':
    app.run(host='example.com', debug=True)

person Raj    schedule 06.11.2013    source источник


Ответы (1)


Я не уверен, что это возможно. сопоставление узлов и субдоменов являются взаимоисключающими (см. соответствующий параметр).

Хотя хотелось бы ошибаться.

Один из способов обойти эту проблему, который я могу придумать, — это использовать что-то перед Flask (скажем, nginx), которое указывает custom.com на custom.com._custom.example.com или что-то в этом роде. В своем коде вы можете создать пользовательскую функцию url_for, которая распознает это как пользовательский домен. Я бы спросил в списке рассылки Flask, так как они смогут дать вам исчерпывающий ответ.

person korylprince    schedule 09.11.2013
comment
Это хорошее предложение. Я только что отправил по электронной почте список Flask. Спасибо. - person Raj; 10.11.2013
comment
Пожалуйста, сообщите нам ответ, который вы получили. - person korylprince; 11.11.2013