flask学习:使用flask-wtf添加验证逻辑

接上一篇,添加验证逻辑有以下几步:

1.导入所需的方法:

from wtforms.validators import DataRequired, EqualTo

一个是要求不能有缺失值,一个是判断两个东西是否相等。

2.在自定义表单类中进行添加:

class LoginForm(FlaskForm):
    username = StringField(u'用户名:', validators=[DataRequired()])
    password = PasswordField(u'密码:', validators=[DataRequired()])
    password2 = PasswordField(u'确认密码:', validators=[DataRequired(), EqualTo('password', "错了老铁!")])
    submit = SubmitField(u'提交')

3.在login()方法中添加一句话就可以实现验证:

# 3.验证参数
        if login_form.validate_on_submit():
            print(username)
            return "success!"
        else:
            flash("参数有误!")

4.此外,还需要在html表单中加一句:

<form method="post">
    {{ login_form.csrf_token() }}
    {{ login_form.username.label }}{{ login_form.username }}<br>
    {{ login_form.password.label }}{{ login_form.password }}<br>
    {{ login_form.password2.label }}{{ login_form.password2 }}<br>
    {{ login_form.submit}}<br>
</form>

注:这里csrf是跨站请求伪造,具体是什么我也没有研究过,只是说了应该加这么一句话。可以看这篇博客对csrf的介绍:https://blog.youkuaiyun.com/sinat_41898105/article/details/80783551

### 使用 Flask-WTF 进行表单验证Flask 中,`Flask-WTF` 库提供了强大的工具来简化 Web 表单的创建和验证过程。为了实现有效的表单验证,开发者通常会遵循一系列特定的方法。 #### 创建表单类 使用 `Flask-WTF` 时,每个 Web 表单都由一个继承自 `Form` 的类表示[^4]。此表单类定义了一组字段,这些字段作为对象存在,并且可以附一个或多个验证函数以确保用户输入的有效性。 ```python from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, Email, EqualTo, ValidationError from models import User class RegistrationForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired(), Email()]) password = PasswordField('Password', validators=[DataRequired()]) confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) submit = SubmitField('Sign Up') def validate_email(self, field): if User.query.filter_by(email=field.data).first(): raise ValidationError('该邮箱已被注册') ``` 上述代码展示了如何定义一个简单的注册表单并为其添加基本验证逻辑。对于更复杂的场景,则可以通过重写 `validate_<fieldname>` 方法来自定义额外的验证规则[^5]。 #### 实现 CSRF 保护 除了提供便捷的方式构建表单外,`Flask-WTF` 还自动集成了跨站点请求伪造 (CSRF) 攻击防护机制[^2]。这意味着只要正确配置了应用实例,在每次提交 POST 请求之前都会检查是否存在合法的令牌,从而提高了应用程序的安全性。 #### 处理表单提交 当接收到用户的 HTTP POST 请求后,可以在视图函数内部轻松地处理已填充好的表单实例: ```python @app.route("/register", methods=['GET', 'POST']) def register(): form = RegistrationForm() if form.validate_on_submit(): flash(f'Account created for {form.username.data}!', 'success') return redirect(url_for('home')) return render_template('register.html', title='Register', form=form) ``` 这段代码片段说明了如何接收客户端发送过来的数据并通过用 `validate_on_submit()` 来触发所有预设以及任何自定义的验证器。如果一切顺利,则继续执行后续操作;反之则返回带有错误提示信息的页面供用户修正其输入内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值