запрос.форма() приводит к 400 ошибочным запросам: Браузер (или прокси-сервер) отправил запрос, который этот сервер не смог понять

#python #html #forms #flask #request

Вопрос:

У меня есть сортируемый список в виде веб-приложения, подключенного к sqlite. Я хочу добавить новые записи в список с помощью выпадающего меню. Я не могу сделать записи в списке формой, которая отправляет новые значения.

app.py:

 import sqlite3, logging
from flask import Flask, render_template, request, url_for, flash, redirect, jsonify
from werkzeug.exceptions import abort


app = Flask(__name__, static_url_path='/static')
app.config['SECRET_KEY'] = 'NotForYou'

def get_db_connection():
    conn = sqlite3.connect('/root/ilms/ilmh.db')
    conn.row_factory = sqlite3.Row
    return conn

@app.route('/potm',methods=["POST","GET"])
def potm():
    conn = get_db_connection()
    if request.method == 'POST':
        Name = request.args['newPOTM']
        maxID = conn.execute('SELECT MAX(id) FROM POTM')
        newID = maxID   1
        print(newID)
        maxOrder = conn.execute('SELECT MAX(listorder) FROM POTM')
        newOrder = maxOrder   1
        print(newOrder)
        conn.execute('INSERT INTO POTM (id, player, listorder) VALUES (?, ?, ?)',
                     (newID, Name, newOrder))
        conn.commit()
        conn.close()
        return redirect(url_for('potm'))
    dragdrop = conn.execute("SELECT * FROM POTM ORDER BY listorder ASC")
    dropdown = conn.execute('SELECT Name FROM alltime ORDER BY Name ASC').fetchall()
    return render_template('potm.html', dragdrop=dragdrop, dropdown=dropdown)
 

HTML:

 <div class="container">
    <div class="row justify-content-md-center">
        <div class="dropdown">
            <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                Add Player
            </button>
            <div class="dropdown-menu pre-scrollable" aria-labelledby="dropdownMenu2">
                <form method="POST">
                            {% for item in dropdown %}
                            <input type="text" class="dropdown-item" name="newPOTM" value="{{ item['Name'] }}" onclick=this.form.submit()>
                            </input>
                        {% endfor %}
                </form>
            </div>
        </div>
    </div>
</div>
 

Раскрывающийся список и список отображаются, но когда я нажимаю на объект списка, это приводит к

веркзег.исключения.Ошибка BadRequestKeyError: 400 Неверных запросов: Браузер (или прокси-сервер) отправил запрос, который этот сервер не смог понять. Ключевая ошибка: «newPOTM»

Комментарии:

1. попробуйте Name = request.form.get('newPOTM') вместо Name = request.args['newPOTM'] , или Name = request.form['newPOTM'])

2. @Ghost Ops Извините, пробовал это раньше и начал с request.form(). request.form.получить результаты в ошибке типа: объект «метод» не может быть подписан. запрос. форма приводит к указанной ошибке 400

Ответ №1:

Получилось: я пропустил определение действия формы. с помощью request.form() я передал проблему.