Получить URL-адрес сервера - PullRequest
0 голосов
/ 13 марта 2020

Я использую электронную почту flask и flask для отправки электронной почты. Когда я работаю, я использовал localhost в качестве базового URL. Я развернул его на сервере, и отправленная электронная почта все еще отображается с адресом localhost. Например,

base_url = "http://localhost:0.0.0.6465"
url=base_url+'/login'

Я отправил электронное письмо (я использую flask -mail) с URL-адресом, и я могу войти по URL-адресу.

С тем же сценарием при развертывании на сервер, который я получаю с тем же адресом localhost. Мне нужно, чтобы URL сервера был базовым URL. Для отладки я попытался

url=request.base_url+'/login'

Я получаю ошибку 404 в браузере, если я использую это. Я не хочу изменять инициализацию base_url, потому что я должен использовать как на локальном, так и на сервере. Как я могу это сделать?

1 Ответ

2 голосов
/ 13 марта 2020

Вы можете получить URL к запущенному в данный момент приложению через request.host_url. Но то, что вы действительно хотите сделать, чтобы получить внешний URL-адрес для определенной c части вашего приложения, - это использовать url_for так же, как и при обращении к обычным конечным точкам, но с параметр _external=True:

Учитывая, что у вас есть:

@app.route('/login')
def login():
    ....

Вы можете создать внешний URL-адрес с помощью:

from flask import (
    url_for,
)

...

url = url_for('login', _external=True)

Это также будет учитывать любые прокси-серверы перед вашим приложением, если вам это нужно, если вы использовали промежуточное ПО ProxyFix при настройке объекта app.

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

...