switch/toogle 导致 BadRequestKeyError: 400 Bad Request

Posted

技术标签:

【中文标题】switch/toogle 导致 BadRequestKeyError: 400 Bad Request【英文标题】:switch/toogle results in BadRequestKeyError: 400 Bad Request 【发布时间】:2021-11-04 08:35:21 【问题描述】:

我有一个使用 python 和烧瓶生成的 index.html,它显示了一个列表。我想通过引导开关过滤这个列表。现在我有以下代码,它可以通过 GET 请求显示我的 index.html 列表。启用开关也可以工作并显示过滤列表。但是当切换回未过滤/关闭时,我收到了一个错误的请求。问题在于 switchvalue = request.form['switch'] 但我不明白为什么会这样。

Python 代码:

@app.route('/', methods=['POST', 'GET'])
def index():
    conn = get_db_connection()

    if request.method == 'POST':
        switchvalue = request.form['switch']
        flash(switchvalue)

        if switchvalue == '1':
            rows = conn.execute('SELECT Name, CAST (Points AS int) as Points, isActive FROM table WHERE isActive = "Active"').fetchall()
            conn.close()
            return render_template('index.html', rows=rows, switchcheck=1)

    rows = conn.execute('SELECT Name, CAST (Points AS int) as Points, isActive FROM table').fetchall()
    conn.close()
    return render_template('index.html', rows=rows, switchcheck=0)

HTML:

...
% block content %
    <h1>% block title % Title % endblock %</h1>
    <form method="POST" action=" url_for('index') ">
         <div class="custom-control custom-switch">
             % if switchcheck == 0 %
                 <input type="checkbox" name="switch" onclick=this.form.submit() value="1" class="custom-control-input" id="customSwitch1">
             % else %
                 <input type="checkbox" name="switch" onclick=this.form.submit() value="0" class="custom-control-input" id="customSwitch1" checked>
             % endif %
             <label class="custom-control-label" for="customSwitch1">Active</label>
         </div>
    </form>
    % for row in rows % 
...

【问题讨论】:

【参考方案1】:

因此,开关的值似乎没有被发布,因为开关被作为复选框处理,并且当它们未被选中时,它们不会提交值。因此 submit.form(switch) 看不到数据。

我在这里找到了我的提示:How to utilize Bootstrap Ti Ta Toggle Checkbox with Flask

还提到使用带有 name=switch 的隐藏表单来处理这个问题,但对我来说没有成功。我的解决方法如下:

try:
    switchvalue = request.form['vrswitch']
except:
    switchvalue = 0

我敢打赌,有更优雅的方法可以做到这一点,但它确实有效!

【讨论】:

以上是关于switch/toogle 导致 BadRequestKeyError: 400 Bad Request的主要内容,如果未能解决你的问题,请参考以下文章

amazon redshift 并发写入导致插入记录,导致重复

FileHandler 创建会导致 NoSuchFileException 导致缺少 .lck

导致非标准行为的 #pragma 是不是会导致 __STDC__ 宏未定义为 1?

为啥 const int main = 195 会导致程序正常工作,但没有 const 会导致分段错误?

React 组件中的错误导致应用程序重新渲染,从而导致无限循环。为啥?

由于master宕机等导致resource调用出现异常,直接将该resource返回到pool以便其他代码使用会导致得到不可预期的结果,导致返回数据混乱。