LINUX.ORG.RU

Помощь с Flask: отправить переменную с кнопки, но так, чтобы было не post

 , , ,


0

1

Суть такая.

Страница с кнопкой:

        <form action="{{ url_for('add_journal_record') }}" method="post">
          <input type="hidden" name="docid" value="{{ doc['id'] }}">
          <input type="hidden" name="docname" value="{{ doc['docname'] }}">
          <input type="submit" value="Send">
        </form>

Маршрут:

@app.route('/add_journal_record', methods=('GET', 'POST'))
def add_journal_record():
    docid = request.form['docid']
    docname = request.form['docname']
    conn = get_db_connection()
    people = conn.execute('SELECT p.id, p.personname FROM people AS p;').fetchall()
    statuses = conn.execute('SELECT s.id, s.statusname FROM statuses AS s;').fetchall()
    if request.method == 'POST':
        journaldate = request.form['journaldate']
        personid = request.form['person']
        statusid = request.form['status']
        comment = request.form['comment']
        conn.execute('INSERT INTO journal (docid, personid, statusid, journaldate, comment) VALUES (?, ?, ?, ?, ?)',
                     (docid, journaldate, personid, statusid, comment))
        conn.commit()
        conn.close()
        return redirect(url_for('index'))
    return render_template('add_journal_record.html', people=people, statuses=statuses, docname=docname)

Из add_journal_record.html:

  <input type="date"
         name="journaldate"
         min="2018-01-01"
         required
         value={{ request.form['journaldate'] }}>

Если делать так, то ругается на werkzeug.exceptions.BadRequestKeyError / 400 Bad Request in Flask, что ключи не найдены. Как я понял, дело в том, что из-за передачи из первого куска doc['id'] и doc['docname'] через post, маршрут сразу считает, что обрабатывает post, а значит все переменные, которые я присваиваю после if request.method == "POST": не обнаруживаются (их еще не заполнили). Жанглирование с get не сработают, т.к. тогда doc['*'] не передастся.

Вопрос: как правильно передать по кнопке переменную, но чтобы это не считалось post? Правильно ли я вообще пытаюсь это сделать или есть пути правильнее/проще? Нуб во flask и python, да и в программировании в целом. Пилю для себя.

А там нельзя request.form.get(“docId”) сделать случаем? Ну и с остальными так. А еще можно включить debug, там подробнее будет

100 лет в фласке не ковырялся

ggrn ★★★★★
()
Последнее исправление: ggrn (всего исправлений: 2)
Ответ на: комментарий от ggrn

Так и есть, наркомания. Пишу же

Нуб во flask и python, да и в программировании в целом

По поводу

ты форму шлешь постом так?

А как ее еще слать? В в оф. доках именно такой способ и преподносят. Тут тоже. Поясни, что не так?

Хочу я сделать следующее. На странице, из которой я выдрал первый кусок html кода, итерируются данные о документах. Каждый документ в своей таблице. В этой же таблице есть кнопки, по нажатию которых я хочу хочу произвести какое-то действие с этим документом на основании данных, которые итерируются, поэтому я через кнопку передаю id документа и имя документа. А в маршруте на основании переданных данных заполняется страница, в которой указываются уже другие данные, но для этого же документа. То есть по сути мне по кнопке надо инициировать процедуру работы с документом путем передачи данных из БД о нем, чтобы не городить отдельную форму и страницу для ввода id/имени, а делать это непосредственно с обозначенной страницы со списком документов.

demonworm
() автор топика
Ответ на: комментарий от ggrn

Кажется, я понял, о чем ты говоришь. Я же говорю, я нуб в этом. Если пользовательский ввод не требуется, я могу через get передать нужную информацию в маршрут. Поменял в первом куске на method="get", а в маршруте убрал if... POST:, а вместо request.form исползовал request.args.get для id и имени документа. Теперь все работает.

demonworm
() автор топика