【问题标题】:flask "error: [Errno 32] Broken pipe" when using "return redirect(url_for...)"使用“return redirect(url_for...)”时烧瓶“错误:[Errno 32] Broken pipe”
【发布时间】:2015-09-02 16:47:21
【问题描述】:

我是 Jquery 的新手,正在尝试轮询服务器 API 以了解变量状态的变化。一切正常,除了当我使用“return redirect(url_for...)”作为返回类型时得到一个“损坏的管道”。

我是不是走错了路?我只想在变量发生变化时触发主视图,因为计算该视图的对象很昂贵,并且如果状态相同则不需要。

Python 代码:

@app.route('/status')
def check_deployment_status():

    # get all the simpleDB domains
    # the list of clusters are used to build the left nav
    clusters = sdb_conn.get_domain('clusters')

    cluster_id = request.args.get('id', '')
    state = request.args.get('state', '')

    # get that cluster from the list of clusters
    cluster=clusters.get_item(cluster_id)

    print "cluster state: " + cluster['state']
    print "dashboard state: " + state

    if cluster['state'] != state:
        return redirect(url_for('cluster', id=cluster_id))
    else:
        return 'this'

jquery 代码:

$(document).ready(function() {
    (function poll() {
        setTimeout(function() {
        $.ajax({
            url: "/status",
            type: "GET",
            success: function(data) {
               console.log("polling");
            },
            dataType: "json",
            data: {"id": $('#id').text(), "state": $('#state').text()},
            complete: poll,
            timeout: 2000
        })
        }, 5000);
    })();
});

错误,忘记发布错误:

Exception happened during processing of request from ('127.0.0.1', 56862)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 651, in __init__
self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close()
  File "/usr/lib/python2.7/socket.py", line 279, in close
self.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

【问题讨论】:

    标签: jquery python flask


    【解决方案1】:

    是的,我想错了(我想)。最后,我制作了一个 URL 并将其作为 jquery 响应传回,并在 javascript 中处理重定向。新的 jquery 函数如下所示:

    $(document).ready(function() {
    (function poll() {
        setTimeout(function() {
        $.ajax({
            url: "/status",
            type: "GET",
            success: function(data) {
            if (data.redirect) {
                // data.redirect contains the string URL to redirect to
                window.location.href = data.redirect;
            }
                console.log(data.redirect);
            },
            dataType: "json",
            data: {"id": $('#id').text(), "state": $('#state').text()},
            complete: poll,
            timeout: 2000
        })
        }, 5000);
    })();
    });
    

    而python是这样的:

    @app.route('/status')
    def check_deployment_status():
    
        # get all the simpleDB domains
        # the list of clusters are used to build the left nav
        clusters = sdb_conn.get_domain('clusters')
    
        cluster_id = request.args.get('id', '')
        state = request.args.get('state', '')
    
        # get that cluster from the list of clusters
        cluster=clusters.get_item(cluster_id)
    
        print "cluster state: " + cluster['state']
        print "dashboard state: " + state
    
        if cluster['state'] != state:
            #return redirect(url_for('cluster', id=cluster_id))
            return jsonify(redirect=url_for('cluster', id=cluster_id))
        else:
            return 'this'
    

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多