# ... 之前的导入和配置 ... @app.route('/register', methods=['GET', 'POST']) def register(): if request.method == 'POST': # --- 第一步:接收用户名、密码、邮箱 --- username = request.form.get('username') password = request.form.get('password') email = request.form.get('email') if not username or not password or not email: flash("请填写完整信息") return render_template('register.html', step=1) conn = get_db_connection() # 检查用户名是否已存在 user = conn.execute("SELECT * FROM users WHERE username = ?", (username,)).fetchone() if user: flash("用户名已存在") conn.close() return render_template('register.html', step=1) # 生成验证码 code = str(random.randint(100000, 999999)) print(f"DEBUG: 发送验证码 {code} 到 {email}") # 控制台打印验证码方便调试 try: # 发送邮件 (这里假设你配置了 app.config['MAIL_...']) msg = Message('宠物名片系统注册验证码', recipients=[email]) msg.body = f"您的注册验证码是:{code},5分钟内有效。" mail.send(msg) # 将验证码、时间、用户信息存入 session,等待第二步验证 session['reg_username'] = username session['reg_password'] = password session['reg_email'] = email session['verify_code'] = code session['verify_time'] = time.time() conn.close() # 渲染第二步:输入验证码 return render_template('register.html', step=2, email=email, username=username, password=password) except Exception as e: conn.close() print(f"邮件发送失败: {e}") flash(f"邮件发送失败: {str(e)}") return render_template('register.html', step=1) # GET 请求:显示第一步 return render_template('register.html', step=1) # --- 新增:处理验证码验证的路由 --- @app.route('/verify', methods=['POST']) def verify(): code = request.form.get('code') username = request.form.get('username') password = request.form.get('password') email = request.form.get('email') # 检查 session 中的验证码 if ('verify_code' not in session or session['verify_code'] != code or time.time() - session.get('verify_time', 0) > 300): # 5分钟过期 flash("验证码错误或已过期") return render_template('register.html', step=2, email=email, username=username, password=password) # 验证通过,正式写入数据库 conn = get_db_connection() try: # 确保 users 表里有 email 字段(如果你之前的数据库没有,这里会报错,需要手动加) # 假设你的数据库已经按我之前的建议更新过结构了 conn.execute(""" INSERT INTO users (username, password, email, nickname) VALUES (?, ?, ?, ?) """, (username, password, email, username)) # 默认昵称也是用户名 conn.commit() flash("注册成功,请登录") return redirect(url_for('login')) except Exception as e: print(e) flash("注册失败,数据库错误") return render_template('register.html', step=1) finally: conn.close()