我在同一页面上有两个烧瓶形式。一个表单在开头可见,用户必须选择一个选项,并根据该表单生成第二个表单。其中包含一个dropdown
,它将在onchange
事件中提交表单。发生此提交时,我收到错误的请求错误。我的Html表格是:
<form action="/ip" method="POST" name="btn" value="project">
<label>Select Project : </label>
<select class="form-control" style="width: 50%;display:inline-block" name="project_name">
<option></option>
<option value="k">Ki</option>
<option value="s">S</option>
<option value="l">L</option>
</select>
<button type="submit" class="btn btn-primary m-b-10 m-l-5" style="display:inline-block" ">Fetch Details</button>
</form>
<form method="POST" action="/ip" name="btn" value="dlvr">
<select id="subsystem_value" onchange="this.form.submit()">
{% for i in data %}
{% for k in i %}
<option value={{ k }}>{{ k }}</option>
{% endfor %}
{% endfor %}
</select>
</form>
我的烧瓶视图是:
@auth.route('/ip',methods = ['POST', 'GET'])
def ip():
if request.method == 'POST':
if request.form['btn'] == "project":
project = request.form['project_name']
c, conn = connection()
subsystem = "SELECT distinct sub from ip where project='{}'".format(project)
query = "SELECT distinct del from ip where project='{}'".format(project)
c.execute(query)
data = c.fetchall()
c.execute(subsystem)
subsystem = c.fetchall()
sub = []
for row in subsystem:
for id in row:
sub.append(id)
conn.close()
return render_template('ip.html', data=data,sub=sub)
else:
subsystem = request.form['subsystem_value']
return render_template('ip.html')
else:
return render_template('ip.html')
我尝试为表单创建相同的名称,并给出了单独的值。但我仍然收到错误的请求错误。
答案 0 :(得分:1)
我有两个区域,你的错误来自
1)表单名称因HTML 4而被弃用,因此不再提交
if request.form['btn'] == "project":
烧瓶不会理解
解决方法是给你的提交按钮这个名字
<button type="submit" name="project" class="btn btn-primary m-b-10 m-l-5" style="display:inline-block" ">Fetch Details</button>
并在烧瓶视图中,检查这样的表格
if 'project' in request.form:
2)第二个错误就在这一行
<form method="POST" action="/ip" name="btn" value="dlvr">
<select id="subsystem_value" onchange="this.form.submit()">
第二行应该是name= "subsystem_value"
,而不是id="subsystem_value"
否则将无法理解烧瓶中的这条线
subsystem = request.form['subsystem_value']
所以我有这个简化的代码,不再给我一个错误,并以我认为你想要的方式返回值
在烧瓶中
@app.route('/ip',methods = ['POST', 'GET']) #Used @pp.route to match my testing app
def ip():
if request.method == 'POST':
if 'project' in request.form:
project = request.form['project_name']
return str(project)
else:
subsystem = request.form['subsystem_value']
return str(subsystem)
else:
return render_template('test.html')
模板中的
<form action="/ip" method="POST" >
<label>Select Project : </label>
<select class="form-control" style="width: 50%;display:inline-block" name="project_name">
<option></option>
<option value="k">Ki</option>
<option value="s">S</option>
<option value="l">L</option>
</select>
<button type="submit" name="project" class="btn btn-primary m-b-10 m-l-5" style="display:inline-block" ">Fetch Details</button>
</form>
<form name method="POST" action="/ip" >
<select name="subsystem_value" onchange="this.form.submit();">
<option value="test1">t1</option>
<option value="test2">t2</option>
<option value="test3">t3</option>
</select>
</form>
希望能帮到你
答案 1 :(得分:0)
您可以充分利用Flasks调试工具,您可以通过设置环境变量FLASK_DEBUG=1
或将debug=True
传递给app.run()
来激活它。
请参阅http://flask.pocoo.org/docs/1.0/api/#flask.Flask.debug
此外,如果此代码有可能面临恶意用户,请使用SQL绑定变量,而不是从不受信任的输入构建查询。 SQL注入攻击可能会破坏你的一天。