烧瓶 jquery 得到 404

flask jquery GET 404

我正在 Flask 中玩 jQuery 并且一直在使用我在 runnable 上找到的将两个数字相加的简单示例。

我正在使用 Flask-Appbuilder 并查看所有设置以显示模板,效果很好。我将 jQuery 代码包含在模板中,它显示了它应该显示的内容。

在 Flask 端,我创建了视图,视图中的函数用于呈现模板并接收 jQuery GET 请求中的变量。

当我单击模板上的 jQuery link 将两个数字相加时,我在 python 控制台 [=38] 中看到 404 错误=].

[07/Apr/2017 09:48:53] "GET /_add_numbers?a=1&b=1 HTTP/1.1" 404 -

这是我的模板中的内容:

{% extends "appbuilder/base.html" %}

{% block content %}
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"
          rel="stylesheet">
  <script type=text/javascript>
    $(function() {
      $('a#calculate').bind('click', function() {
        $.getJSON('/_add_numbers', {
          a: $('input[name="a"]').val(),
          b: $('input[name="b"]').val()
        }, function(data) {
          $("#result").text(data.result);
        });
        return false;
      });
    });
  </script>

  <body>
    <div class="container">
      <div class="header">
        <h3 class="text-muted">How To Manage JSON Requests</h3>
      </div>
      <hr/>
      <div>
      <p>
    <input type="text" size="5" name="a"> +
    <input type="text" size="5" name="b"> =
    <span id="result">?</span>
    <p><a href="javascript:void();" id="calculate">calculate server side</a>
      </form>
      </div>
    </div>
  </body>
</html>
{% endblock %}

我的 flask 视图如下所示:

class MyView(BaseView):
    default_view = 'sale'

    @expose('/sale', methods=['GET'])
    @has_access
    def sale(self):
        return self.render_template('sale.html')

    @expose('/_add_numbers', methods=['GET', 'POST'])
    @has_access
    def add_numbers(self):
        a = request.args.get('a', 0, type=int)
        b = request.args.get('b', 0, type=int)
        return jsonify(result=a + b)

任何指导将不胜感激。

获取屏幕截图 - https://imgur.com/a/0rxiN

POST 截图 - http://imgur.com/Ns1BEkE

您正在使用 flask-appbuilder 并且 syntax suggested 是:

class MyView(BaseView):
    route_base = "/myview"

    @expose('/method1/<string:param1>')
    def method1(self, param1):
        # do something with param1
        # and return it
        return param1

这导致 url 看起来像这样:http://<your_host>/myview/method1/<awaiting string param>

这可能是干扰您 URL 的原因。


更详尽的解释:

GET 请求尝试定位 /_add_numbers?a=1&b=1 URL,就您的后端而言,它与任何公开的 URL.
不匹配 您应该尝试按如下方式定义暴露的 URL:

@expose('/_add_numbers?<int:a>&<int:b>', methods=['GET', 'POST']) 

如果 flask-appbuilder 给您带来问题,请尝试使用默认烧瓶进行试验,看看它是否适合您,然后根据这些知识继续前进。


注:

通常这不是 GET 而是 POST 请求。

您可以尝试简单的 jquery $.post() 调用而不是 getJSON:

$.post('http://localhost:5000/_add_numbers',{
    a: $('input[name="a"]').val(),
    b: $('input[name="b"]').val()
}, function(data) {
    $("#result").text(data.result);
});

No 'Access-Control-Allow-Origin' header is present on the requested resource. 错误已在这些帖子中被提及并得到彻底解答:

  • "No 'Access-Control-Allow-Origin' header is present on the requested resource"