Flask 无法从 html 表单中选取数据

Flask is unable to pick data from html form

    <form action='signup' method="POST"  onsubmit="return checkPassword();">

        <div class="container">

            <center>
                <h1 style="color: #511845; font-family:'Varela Round',sans-serif;">User Sign up</h1>
            </center>
            <div class="spc">
                <div class="input-container">
                    <i class="fa fa-user icon" style="font-size:30px;"></i>
                    <input type="text" placeholder="Username" name="username" id="username" required>
                </div>
            </div>

            <div class="spc">
                <div class="input-container">
                    <i class="fa fa-envelope-square icon" style="font-size: 30px;"></i>
                    <input type="email" placeholder="Email Address" name="email" id="email" required>
                </div>
            </div>

            <div class="spc">
                <div class="input-container">
                    <i class="fa fa-phone icon" style="font-size: 30px;"></i>
                    <input type="number" placeholder="Phone Number should start with 92" title="Invalid Phone Number" name="phone no" id="number" pattern="[0-9]{12}" required>
                </div>
            </div>

            <div class="spc">
                <div class="input-container">
                    <i class="fa fa-lock icon" style="font-size: 30px;"></i>
                    <input type="password" placeholder="Password" name="psw" id="psw" title="Must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters"  pattern=(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,} required>
                </div>
            </div>

            <div class="spc">
                <div class="input-container">
                    <i class="fa fa-lock icon" style="font-size: 30px;"></i>
                    <input class="input-field" type="password" placeholder="Re-enter password" id="rpsw"  name="rpsw">
                    </div>
            </div>
             
            <center><button class="signup" type="submit" name="sub">Sign-up</button></center>

            <div class="spc" style="padding-left:30px">
                <div class="input-container">
                    <h3 class="signin">
                        <centre>Already have an Account?</centre>
                        <button class="signin-btn"><a style="text-decoration: none;color: white;" href="/signin">Sign-in</a></button>
                    </h3>

                </div>
            </div>
         

        </div>
    </form>
     
    <script>
        function checkPassword(){
          var1 = document.getElementById("psw");
          var2 = document.getElementById("rpsw");
          if(var1.value != var2.value){
              alert("Passwords do not match, please try again!");
              return false;   
              }
          }
         </script>
@app.route('/signup', methods=['GET','POST'])
def signup_page():
     
     if [request.method == "POST"]:
         user_name = request.form['username']
         user_email = request.form['email']
         user_number = request.form['number']
         user_password = request.form["psw"]
        user_id =  user_name[0:3] + str(user_number)[0:3] + user_password[0:3] + str(random.randrange(1000))
         

     return render_template('/Sign_up/signup.html')

我正在尝试从注册表单输入数据,然后执行一些计算,最后将其存储在数据库中(目前尚未实施)当我尝试执行上述代码时,它在本地主机上给我错误如图:

File "C:\Users\lenovo\Desktop\Emergency-Service\User\index.py", line 30, in signup_page
user_name = request.form['username']
File "C:\Users\lenovo\AppData\Local\Programs\Python\Python39\Lib\site-packages\werkzeug\datastructures.py", line 442, in __getitem__
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'username'

我认为你的问题是,这应该是 request.form.get,像这样

if [request.method == "POST"]:
         user_name = request.form.get['username']
         user_email = request.form.get['email']
         user_number = request.form.get['number']
         user_password = request.form.get["psw"]
        user_id =  user_name[0:3] + str(user_number)[0:3] + user_password[0:3] + str(random.randrange(1000))

解决方案是:

@app.route('/signup', methods=['GET','POST'])
def signup_page():
     
     if [request.method == "POST"]:
         user_name = request.form.get('username')
         user_email = request.form.get('email')
         user_number = request.form.get('number')
         user_password = request.form.get("psw")
          
         user_id =  user_name[0:3] + str(user_number)[0:3] + user_password[0:3] + str(random.randrange(1000))
         print(user_name)
         

  return render_template('/Sign_up/signup.html')