Flask后端与学生注册表单联动异常求助:数据未入库且不跳转
学生注册表单功能异常排查与修复方案
问题根源分析
提交表单后数据无法入库且无法跳转至感谢页面,核心问题集中在两处:
1. HTML表单字段缺失关键属性
下拉选择框<select>未设置name="course"属性,导致Flask后端无法通过request.form['course']获取课程选择值,直接触发KeyError中断流程。
2. Flask后端事务提交逻辑不完整
仅在课程匹配成功时执行connection.commit(),但插入学生基础信息的操作未单独提交,即使课程存在,学生信息也不会写入数据库;同时未捕获表单字段缺失的异常,导致无友好报错。
修复后的代码
修复后的HTML代码(StudentRegistration.html)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="CSS/StudentRegistration.css"> <title>Student Registration Form</title> </head> <body> <form action="/submit_form" method="post"> <div class="container"> <center> <h1> Student Registeration Form</h1> </center> <hr> <label> Firstname </label> <input type="text" name="firstname" placeholder= "Firstname" size="15" required /> <label> Lastname: </label> <input type="text" name="lastname" placeholder="Lastname" size="15"required /> <br> <label for="email"><b>Email</b></label> <input type="text" id="email" placeholder="Enter Email" name="email" required> <div> <label> Course : </label> <!-- 添加name属性,让后端可以获取课程值 --> <select name="course"> <option value="" selected disabled>Select your course</option> <option value="Animation">Animation</option> <option value="Social Media Marketing">Social Media Marketing</option> <option value="Web and App Design">Web and App Design</option> <option value="Graphic Design">Graphic Design</option> <option value="Video Editing">Video Editing</option> <option value="Video Games Development">Video Games Development</option> </select> <br> <button type="submit" class="registerbtn">Register</button> </div> </form> </body> </html>
修复后的Flask代码(Register.py)
from flask import Flask, render_template, request, redirect, url_for import mysql.connector app = Flask(__name__) @app.route('/submit_form', methods=['POST']) def submit_form(): if request.method == 'POST': try: # 捕获表单字段缺失的异常 firstname = request.form['firstname'] lastname = request.form['lastname'] email = request.form['email'] course_name = request.form['course'] # 连接数据库 connection = mysql.connector.connect(host='localhost', database='solarAcademy', user='root', password='P@ssw0rdMySQL', ssl_disabled=True) cursor = connection.cursor() # 插入学生信息并立即提交,避免后续操作失败导致学生数据丢失 cursor.execute("INSERT INTO students (name, lastname, email) VALUES (%s, %s, %s)", (firstname, lastname, email)) student_id = cursor.lastrowid connection.commit() # 检查课程是否存在 cursor.execute("SELECT course_id FROM courses WHERE course_name = %s", (course_name,)) course_data = cursor.fetchone() if course_data: course_id = course_data[0] # 插入选课记录并提交 cursor.execute("INSERT INTO registrations (student_id, course_id) VALUES (%s, %s)", (student_id, course_id)) connection.commit() return redirect(url_for('thank_you')) else: return "Course not found." except KeyError as e: return f"Missing form field: {e}" except mysql.connector.Error as error: return f"Database Error: {error}" finally: if 'connection' in locals() and connection.is_connected(): cursor.close() connection.close() @app.route('/thank_you') def thank_you(): return render_template('thank-you.html') if __name__ == '__main__': app.run(port=5000, debug=True)
内容的提问来源于stack exchange,提问作者alina
相关产品推荐
相关产品推荐

