heroku上的url_for和_external = True不会在URL上附加服务器名称

时间:2017-06-29 04:16:38

标签: python python-3.x heroku flask

我在Heroku上部署了一个应用程序,但问题是当我的应用程序发送电子邮件时,它不会在URL中附加我的服务器名称:

content = Content("text/html", verification_email.format(user["first_name"],
                                                             url_for("register.display_register_form",
                                                                     token=token.decode("utf-8"), external=True)))

但我在电子邮件中收到的链接是:

http:///register_account/DnsJpXw_QIcPYeDHEg_fipB2kRiJBUj2RI6I9cI4Yl4w6K9ohbZRMVqBInuV0aOsBT4Zqt69X8MfhNfnys4s-DAQmgu1OPBwmSQnzAELvdcCyiZtkJGSY8_dQ799FOewtBDkvqR1D8XHmvVxgaVqbwSjdEBnvFsBBHMQCic%3D/verify?external=True

我的网址存在问题:

  • 它不是https,它应该是因为它是heroku上的主机
  • 服务器名称不会仅显示在URL ///中,就像服务器名称为空白
  • 一样

如何获得正确的网址https://my-server-name/register_account...

修改

我尝试在config.py文件中设置以下变量:

SERVER_NAME =“http://my-server-58140.herokuapp.com

它在我的路径中生成了错误,我无法访问任何网址,例如,以下网址可以访问,但在定义我的SERVER_NAME时它不再存在:

http://my-server-58140.herokuapp.com/home

修改

我的烧瓶应用程序已配置:

SERVER_NAME = os.environ.get('SERVER_NAME')
DEBUG = True
BASE_DIR = os.path.abspath(os.path.dirname(__file__))

在我的localhost上将environnement变量设置为0.0.0.0:5000,在我的生产服务器上设置为my-server-58140.herokuapp.com

1 个答案:

答案 0 :(得分:3)

要生成正确的URL,需要设置这两个Flask配置值:

  • SERVER_NAME到您网站的名称,
  • PREFERRED_URL_SCHEMEhttps

请参阅documentation for url_for()how to configure a Flask application

编辑:此外,url_for中的参数应为_external而不是external