烧瓶-400错误的要求

时间:2018-10-16 19:15:36

标签: python python-3.x oracle flask oracle11g

我有这个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

2 个答案:

答案 0 :(得分:1)

没有回溯(开发时在调试服务器上运行 ,对吗?),您得到的异常来自

searched = request.form['search']

行。

  • 您有/editora帖子的HTML示例
  • 您拥有的Python代码的路由为/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'
  1. 因为您正在向他们无法处理的应用程序或服务器发送内容。 (http://werkzeug.pocoo.org/docs/0.14/exceptions/#werkzeug.exceptions.BadRequest
  2. KeyError用于尝试访问不存在的dict对象参数'search',因为beucase形式从未提交过。