我有这个python代码,应该从html表单中获取数据并在WHERE子句中使用它:
@app.route('/search', methods=['GET'])
def search():
connect = cx_Oracle.connect("benjamin", "siliyetu", "PRINCE-PC/XE")
cursor = connect.cursor()
searched = request.form['search']
named_params = {'search':searched}
query = cursor.execute("SELECT * FROM edited WHERE REGEXP_LIKE (cod_ed,
:search) OR REGEXP_LIKE (nome_ed,:search) OR
REGEXP_LIKE (endereco,:search) OR REGEXP_LIKE
(telefone,:search) OR REGEXP_LIKE
(cidade,:search)", named_params)
results = cursor.fetchall()
posts = list(results)
return render_template('search.html', posts=posts)
而我正在使用的模板是这个(无论如何是模板的一部分。它不是全部):
<form method="POST" action="/editora" class="form-outline" >
<div class="col-lg-7 col-offset-6 right">
<div class="form-group mx-lg-3 mb-2">
<label for="element-7" ></label>
<input id="search" name="search" type="text" class="form-control" placeholder="Pesquisar..." />
<label></label>
<a class="btn btn-primary " type="submit" href="search">Pesquisa</a>
当我尝试使用表单中的数据时,它会给我一个
werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'search'
但是当我使用input()输入数据时,它可以正常工作。有什么!!
我将如何解决此问题?我也想在where子句中添加一些正则表达式,但不要让它花哨。我也该怎么做?
Ps-我正在使用Oracle Express 11g
答案 0 :(得分:1)
没有回溯(开发时在调试服务器上运行 ,对吗?),您得到的异常来自
searched = request.form['search']
行。
/editora
帖子的HTML示例/search
(不是/editora
),并且视图无论如何都不会接受POST请求(methods=['GET']
)。 您确定您发布的摘录正确吗?
无论如何, request.form
仅用于POST请求。
答案 1 :(得分:0)
如果您要向 search 路线提交数据,则表单操作应指向该路线。
<form method="POST" action="/search" class="form-outline" >
如果您希望搜索路线从POST请求中获取该数据,则应输入方法“ POST”值。
@app.route('/search', methods=['GET', 'POST'])
您得到的原因:
werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'search'