【问题标题】:request.form() results in 400 Bad Request: The browser (or proxy) sent a request that this server could not understandrequest.form() 导致 400 Bad Request:浏览器(或代理)发送了此服务器无法理解的请求
【发布时间】:2021-12-04 07:54:37
【问题描述】:

我有一个可排序的列表作为连接到 sqlite 的 web 应用程序。 我想使用下拉菜单将新条目添加到列表中。 我未能使列表条目成为提交新值的表单。

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>

显示下拉列表和列表,但是当我单击列表对象时,它会导致

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: 浏览器(或代理)发送了此服务器无法理解的请求。 KeyError: 'newPOTM'

【问题讨论】:

  • 尝试使用Name = request.form.get('newPOTM') 代替Name = request.args['newPOTM'],或Name = request.form['newPOTM'])
  • @Ghost Ops 抱歉,之前尝试过这些并从 request.form() 开始。 request.form.get 导致 TypeError: 'method' object is not subscriptable。 request.form 导致提到的 400 错误

标签: python html forms flask request


【解决方案1】:

得到它的工作:我错过了定义表单动作。使用 request.form() 我通过了问题。

【讨论】:

    猜你喜欢
    • 2020-06-11
    • 2021-02-19
    • 2020-10-17
    • 2020-03-19
    • 1970-01-01
    • 2021-06-04
    • 2018-12-20
    • 1970-01-01
    • 2018-06-21
    相关资源
    最近更新 更多