Колба - 400 Плохой запрос - PullRequest
0 голосов
/ 16 октября 2018

У меня есть этот код 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 edition 11g

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Если вы хотите отправить данные по маршруту 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 никогда не передается.
0 голосов
/ 16 октября 2018

Без трассировки (вы работаете с сервером отладки во время разработки, верно?), Исключение, которое вы получаете, происходит из строки

searched = request.form['search']

.

  • пример HTML, который у вас есть POST для /editora
  • у кода Python, который у вас есть, есть маршрут /search (не /editora), и представление все равно не будет принимать запросы POST(methods=['GET']).

Вы уверены, что отправленные вами фрагменты верны?

request.form в любом случае заполняется только для запросов POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...