首页 > 解决方案 > 获取服务器的 URL

问题描述

我正在使用烧瓶和烧瓶电子邮件发送电子邮件。当我工作时,我使用 localhost 作为基本 url。我将它部署在服务器上,发送的电子邮件仍然显示 localhost 地址。例如

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

我用 url 发送了一封电子邮件(我正在使用烧瓶邮件),我可以使用 url 登录。

当我在服务器上部署时使用相同的脚本,我得到了相同的本地主机地址。我需要服务器 URL 应该是基本 URL。为了调试这个我试过

url=request.base_url+'/login'

如果我使用它,我会在浏览器中收到 404 错误。我不想更改 base_url 的初始化,因为我必须在本地和服务器中都使用。我怎样才能做到这一点?

标签: pythonflaskflask-mail

解决方案


您可以通过request.host_url. 但是,要获取应用程序特定部分的外部 URL,您真正想要做的是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和远程主机上工作。


推荐阅读