【问题标题】:Invalid url with url_for带有 url_for 的 url 无效
【发布时间】:2017-05-25 16:16:10
【问题描述】:

我在使用 url_for 和 Python Flask 时遇到了错误。错误内容如下: MissingSchema: Invalid URL

不确定是什么问题。这是我的代码:

@app.route("/", methods=('GET', 'POST'))
def landing():
    form = forms.OptinForm()
    if form.validate_on_submit():
        requests.get(url_for('indoctrination', email=form.email.data, name=form.first_name.data))
    return render_template('index.html', form=form)

【问题讨论】:

    标签: python flask python-requests url-for


    【解决方案1】:

    在您的使用中,url_for 正在返回类似 /some/example 的相对路径。 requests.get 需要完整的绝对路径,例如 http://example.com/some/path。您可能希望在相对路径前面添加基本 url。

    【讨论】:

    • 这是正确答案,但url_for 也可以使用_external 关键字arg 为您生成完整的URL,例如url_for('indoctrination', ..., _external=True)docs
    • _external=True 解决了谢谢大家。
    • @jonafato 酷!我以前从未使用过_external,但它看起来非常有用!不确定它是否总是按预期工作(例如,如果您使用 Flask 提供两个不同的主机名,_external 使用SERVER_NAME,这将是localhost0.0.0.0 或其中一个主机名或其他东西可能希望在请求进入此路由的同一主机名上发出此请求,在这种情况下,您需要将请求中的 base_url 前置到相对 url_for 路径)。 @freefly0313 很高兴你成功了!
    • 我收回了。我现在遇到了另一个错误。当我提交表单时,它只是挂起并最终超时。
    • @freefly0313 烧瓶开发服务器是单线程的。在处理另一个请求时向烧瓶提供的 URL 发出请求将导致死锁(即请求 A 要求请求 B 完成,但请求 B 在请求 A 完成之前无法启动)。您可能应该直接调用您需要的任何函数,而不是向您自己的烧瓶应用程序本身发出 HTTP 请求。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2012-07-15
    • 2013-07-26
    • 2017-06-29
    相关资源
    最近更新 更多