使用Flask提供的后端表单
main.py
from flask import Flask,render_template,request # 导入类型的包,字符串,密码,提交 from wtforms import StringField,PasswordField,SubmitField from flask_wtf import FlaskForm # 验证的包,不能为空,数据是否相同 from wtforms.validators import DataRequired,EqualTo app=Flask(__name__) # 防止攻击手段,后面字符串为随意字符串 app.config['SECRET_KEY'] = 'AQWESDFK' # 定义表单模型类 class Register(FlaskForm): username = StringField(label="用户名",validators=[DataRequired('用户名不能为空')]) password = StringField(label="密码", validators=[DataRequired('密码不能为空')]) agpassword = StringField(label="再次输入密码", validators=[DataRequired('密码不能为空'),EqualTo('password')]) submit = SubmitField(label="提交") @app.route('/',methods=['GET','POST']) def register(): # 创建表单对象 form = Register() if request.method == 'GET': return render_template('index.html',form=form) if request.method == 'POST': username = form.username.data password = form.password.data agpassword = form.agpassword.data print(username) print(password) print(agpassword) return render_template('index.html', form=form) if __name__ == '__main__': app.run()
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单</title> </head> <body> <img src="static/header.jpg"> <form action="" method="post"> {{ form.username.label }} {{ form.username }} {{ form.password.label }} {{ form.password }} {{ form.agpassword.label }} {{ form.agpassword }} {{ form.submit }} </form> </body> </html>
但是发现,前端输入了两个不相同的密码,依然传递给了后端
解决方法:加入验证器
index.html,注意添加:{{form.csrf_token}}
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单</title> </head> <body> <img src="static/header.jpg"> <form action="" method="post"> {{form.csrf_token}} {{ form.username.label }} {{ form.username }} {{ form.password.label }} {{ form.password }} {{ form.agpassword.label }} {{ form.agpassword }} {{ form.submit }} </form> </body> </html>
main.py
from flask import Flask,render_template,request # 导入类型的包,字符串,密码,提交 from wtforms import StringField,PasswordField,SubmitField from flask_wtf import FlaskForm # 验证的包,不能为空,数据是否相同 from wtforms.validators import DataRequired,EqualTo app=Flask(__name__) # 防止攻击手段,后面字符串为随意字符串 app.config['SECRET_KEY'] = 'AQWESDFK' # 定义表单模型类 class Register(FlaskForm): username = StringField(label="用户名",validators=[DataRequired('用户名不能为空')]) password = StringField(label="密码", validators=[DataRequired('密码不能为空')]) agpassword = StringField(label="再次输入密码", validators=[DataRequired('密码不能为空'),EqualTo('password')]) submit = SubmitField(label="提交") @app.route('/',methods=['GET','POST']) def register(): # 创建表单对象 form = Register() if request.method == 'GET': return render_template('index.html',form=form) if request.method == 'POST': # 加入验证器,确保数据是正确的 if form.validate_on_submit(): username = form.username.data password = form.password.data agpassword = form.agpassword.data print(username) print(password) print(agpassword) else: print('验证失败!') return render_template('index.html', form=form) if __name__ == '__main__': app.run()