Flask не может выбрать данные из html-формы

    <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'

Пожалуйста, прочитайте При каких обстоятельствах я могу добавить «срочно» или другие подобные фразы к моему вопросу, чтобы получить более быстрые ответы? - резюмируя, это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.

halfer 16.12.2020 14:06

Редактирование @James было правильным, пожалуйста, оставьте его в покое.

halfer 16.12.2020 14:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
100
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, твоя проблема в том, что это должно быть 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')

Другие вопросы по теме