首页 > 解决方案 > 该复选框在未选中时不能返回 False,但在选中时可以返回 True

问题描述

应用程序.py

@app.route('/register',methods=['GET','POST'])
def register():
    if request.method == 'POST':
        details = request.form
        name = details['name']
        username = details['username']
        password = details['password']
        tel = details['tel']
        email = details['email']
        is_member = details['member']
        if is_member == 'on':
            is_member = True
        else:
            is_member = False
        cursor = mysql.connection.cursor()
        query = '''INSERT INTO customers (name,username,password,tel,email,member) VALUES(%s,%s,%s,%s,%s,%s)'''
        values = (name,username,password,tel,email,is_member)
        cursor.execute(query,values)
        mysql.connection.commit()
        cursor.close()
        return redirect(url_for('reg_success'))

    return render_template('reg_account.html')

reg_account.html

<script>
        $(doucment).ready(function(){
            $("#submit_detail").click(function(){
                $("#member").is(':checked',function(){
                    if ($(this).is(':checked')){
                        $(this).attr('value',"True");
                    } else{
                        $(this).attr('value',"False");
                    }
                    var is_member = $("#member").val();   
                }) 
            })
        })
    </script>
{% block content %} 
<form method="POST" class="login_details">
        <h3>Registration</h3>
        <!-- <legend>Log-in Details</legend> -->
        <p><label for="name">Name:</label><input type="text" name="name" id="name" size="35" required></p>
        <p><label for="tel">Mobile:</label><input type="text" name="tel" id="tel" size="35" required></p>
        <p><label for="email">Email:</label><input type="text" name="email" id="email" size="35"></p>
        <p><label for="username">Username:</label><input type="text" name="username" id="username" size="35" required></p>
        <p><label for="password">Password:</label><input type="text" name="password" id="password" size="35" required></p>
        <p><label for="cpw">Confirm password:</label><input type="text" name="cpw" id="cpw" size="35" required></p>
        <p><label for="member">Apply as member?</label><input type="checkbox" name="member" id="member"></p>
        <p><input type="submit" id="submit_detail" value="Register"></p>
    
</form>
{% endblock %}

错误:

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'member'

我想is_member在未选中复选框时返回 False的结果,#member但是我不明白为什么当我勾选复选框时它会起作用,然后结果可以存储到数据库中?我尝试调试了几次,但仍然找不到可能的解决方案,所以有人可以帮忙吗?

标签: pythonhtmlflaskwebphpmyadmin

解决方案


只需检查

if 'member' in data:
# your code
else:
#your code

代替

is_member = data['member'] 

这里的问题是,如果未选中,您不会从 UI 发送成员。因此烧瓶无法在数据字典中找到它。


推荐阅读