将帖子数据传递给脚本瓶

时间:2016-06-13 06:49:10

标签: python flask

我有一个页面需要带两个参数,我想在POST请求中发送,登录和密码。我一直在得到一个IndexError:list index from flask from flask,我假设因为它没有收到脚本的参数。

这是我的view.py

@app.route("/login/", methods=['GET','POST'])
def login():
    if request.method == 'POST':
        name = request.form['login']
        password = request.form['password']
        return redirect(url_for('test', name=name, password=password))
    else:
        return render_template('login.html')


@app.route("/test/", methods=['POST'])
def test():
    name = request.form['login']
    password = request.form['password']
    input = ['/mypath/test.py', name, password]
    a = subprocess.Popen(input, stdout = subprocess.PIPE,
                        stderr=subprocess.PIPE,
                       stdin=subprocess.PIPE)
    out = a.communicate()
    return out

和表格

<form action="{{ url_for('test') }}" method="POST">
<input type="text" name="login">
<input type="password" name="password">
<input type="submit" value="Go">
</form>

回溯:

Traceback (most recent call last)
  File "/usr/lib64/python3.4/site-packages/flask/app.py", line 2000, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1991, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1567, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib64/python3.4/site-packages/flask/_compat.py", line 33, in reraise
    raise value
  File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1642, in full_dispatch_request
    response = self.make_response(rv)
  File "/usr/lib64/python3.4/site-packages/flask/app.py", line 1743, in make_response
    status=status_or_headers)
  File "/usr/lib/python3.4/site-packages/werkzeug/wrappers.py", line 778, in __init__
    self.status = status
  File "/usr/lib/python3.4/site-packages/werkzeug/wrappers.py", line 886, in _set_status
    self._status_code = int(self._status.split(None, 1)[0])
IndexError: list index out of range

1 个答案:

答案 0 :(得分:2)

您的脚本正好接收POST值;它会从您的视图返回响应,这是此处的问题。您没有返回Flask expects to be returned

的内容

您将在此处返回元组字符串:

out = a.communicate()
return out

因为Popen.communicate() method会返回(stdout, stderr)的元组。

当您返回包含两个字符串元素的元组时,Flask希望它是一个响应主体和一个状态代码。由于您的stderr字符串为空,因此解析状态代码(可能采用'200 Ok''404 Not Found'等形式)会失败。

只返回标准输出结果:

stdout, stderr = a.communicate()
return stdout