【问题标题】:CS50 Finance - can't get quote from form?CS50 Finance - 无法从表格中获取报价?
【发布时间】:2020-02-17 20:46:22
【问题描述】:

我正在解决 CS50 的财务问题集。 (https://cs50.harvard.edu/x/2020/tracks/web/finance/)

在此任务中,用户应该能够在 html 页面上提交表单以请求公司股票的当前价格。

以下是我迄今为止为报价路线所做的(使用 python 和烧瓶):

@app.route("/quote", methods=["GET", "POST"])
@login_required
def quote():
"""Get stock quote."""

if request.method == "POST":
    quote = lookup(request.form.get("requested_share"))

    if quote == None:
        return apology("No share found for this symbol")

    return render_template("quoted.html", quote=quote)

# User reached route via GET (as by clicking a link or via redirect)
else:
    return render_template("quote.html")

这是我为“引用”html 页面编写的内容:

{% extends "layout.html" %}

{% block title %}
    Quote
{% endblock %}

{% block main %}
    <form action="/quote" method="post">
        <div class="form-group">
                <input autocomplete="off" autofocus class="form-control" name="requested_share" placeholder="e.g. TSLA" type="text" />
        </div>
        <button class="btn btn-primary" type="submit">Request Quote</button>
    </form>
{% endblock %}

最后,这是我为“引用”的 html 页面(如果他们的报价请求成功,用户应该被带到该页面)获得的内容:

{% extends "layout.html" %}

{% block title %}
    Quoted
{% endblock %}

{% block main %}
<p>A share of {{ quote["name"] }} costs {{ quote["price"] }}</p>
{% endblock %}

但是,当我尝试它时,它似乎表现得好像用户没有输入任何内容。它没有转到quoted.html 页面,而是从这部分代码转到道歉页面:

    if quote == None:
        return apology("No share found for this symbol")

有人可以帮忙吗?我已经盯着它看了好多年,仍然看不出它哪里出了问题。我认为这可能与 API 密钥有关,尽管我已按照页面上的说明进行操作

【问题讨论】:

  • 一个快速的解释是API_KEY for IEX 在flask run 之前的环境中不会被导出。并密切关注规范,即Require that a user input a stock’s symbol, implemented as a text field whose name is symbol

标签: python flask cs50


【解决方案1】:

我认为这可能与最后返回 None 的 GET 调用有关

DEBUG:urllib3.connectionpool:https://cloud-sse.iexapis.com:443 "GET /stable/stock/AAPL/quote?token=[your_api_key] HTTP/1.1" 200 None

所以,我尝试将您的代码插入我的代码中并换掉一些东西,以确保我可以重现您正在体验的内容:

if not quote:
// instead of
if quote == None:

它发生了一两次,但结果是错误输入的符号,例如'APPL' 而不是 'AAPL' 表示苹果股票。

我最初遇到了这个问题,当时通过 lookup() 方法从 api 调用没有返回任何内容。如果您在查找这样的股票代码时没有在控制台中看到消息:

"GET /stable/stock/AAPL/quote?token=[your_api_key] HTTP/1.1" 200 None

"GET /stable/stock/AAPL/quote?token=[your_api_key] HTTP/1.1" 404 None

当 GET 返回 404 时,quote == None 会触发,并且您会调用 apology() 函数。

因此,如果您没有看到与这些行类似的任何内容,则意味着没有调用被发送到 IEX api。我不确定这是否是某种安全功能(或者即使是这种情况,就像其他人评论的那样,确保您的 api 密钥正常工作只是为了确保),但我尝试通过手动插入使用邮递员应用程序拨打电话股票代码和 api 密钥,然后它开始工作。 Postman 是一个用于构建和测试 api 的应用程序,您可以在这里获取它 - link to Postman

这是 Postman 中的结果:

如果没有,请尝试一下,然后检查 CS50 ide 中的控制台是否显示正在进行的调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多