表单验证

flask-wtf扩展扩

概述:
表单扩展库,提供了csrf,表单校验等功能

安装

pip install flask-wtf

一、常见字段类型和验证器

(1)字段类型

表单验证_第1张图片
.42.png

(2)常见验证器

表单验证_第2张图片
41.png

代码

base.html

{% extends 'bootstrap/base.html' %}
{% block navbar %}

{% endblock %}
{% block content %}
{% block pagecontent %}

这是我们自己定义的base 以后所有的子模板都继承我就好

{% endblock %}
{% endblock %}

register.html

{% extends 'common/base.html' %}

{% block title %}
    注册
{% endblock %}

{% from 'bootstrap/wtf.html' import quick_form %}
{% block pagecontent %}

    
{{ quick_form(form) }}
{% endblock %}

login.html

{% extends 'common/base.html' %}

{% block title %}
    登陆
{% endblock %}

{% from 'bootstrap/wtf.html' import quick_form %}
{% block pagecontent %}

    
{{ quick_form(form) }}

dsdfsfsdf

{% endblock %}

manage.py

from flask import Flask,request,render_template
from flask_bootstrap import Bootstrap
from flask_script import Manager
from flask_wtf import FlaskForm #导入表单基类
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,Length,EqualTo,Email,ValidationError

app = Flask(__name__)
app.config['SECRET_KEY'] = 'SECRET_KEY'
bootstrap = Bootstrap(app)
manager = Manager(app)

#自定义表单注册类
class Register(FlaskForm):
    #username为当前标签的name值 用户名为到那个前标签展示的左侧的label标签 点击用户名 出发当前标签选中节点
    username = StringField('用户名',validators=[DataRequired('请输入用户名'),Length(min=6,max=12,message='用户名长度范围在6~12位之间')])
    userpass = PasswordField('密码',validators=[DataRequired('请输入密码'),Length(min=6,max=12,message='密码长度范围在6~12位之间')])
    confirm = PasswordField('确认密码',validators=[DataRequired('请输入确认密码'),EqualTo('userpass',message='密码和确认密码不一致')])
    email = StringField('邮箱',validators=[DataRequired('请输入邮箱地址'),Email(message='请输入正确的邮箱')])
    submit = SubmitField('注册')
    # 需求,帮我去查看表单中的用户名和邮箱是否在用户表中已存在
    def validate_username(self,field):
        if field.data == 'zhangsan':
            # if User.objcets.filter(username=field.data).exists()
            return ValueError('该用户已经存在')
    #验证邮箱
    def validate_email(self,field):
        if field.data == '[email protected]':
            raise ValidationError('该邮箱已存在 请重新输入')

#登录表单类
class Login(FlaskForm):
    username = StringField('用户名',validators=[DataRequired(message='用户名不能为空'),Length(max=9,min=6,message='太短或太长')])
    userpass = PasswordField('密码',validators=[DataRequired('请输入密码'),Length(min=6,max=18,message='密码她顿了')])
    submit = SubmitField('登陆')
#登录
@app.route('/login/',methods=['GET','POST'])
def login():
    form = Login()
    if form.validate_on_submit():
        print(request.form)
    return render_template('user/login.html',form=form)
#注册
@app.route('/register/',methods=['GET','POST'])
def register():
    form = Register() #实例化表单类
    # if request.method == 'POST':
    #     print(request.form)
    #     return '数据提交过来了'
    #这个方法是实现表单校验功能的 csrf,数据正确性 都通过了 则为真 否则为假
    if form.validate_on_submit():
        # print(request.form)
        print(form.username) #拿到username的整个标签
        print(form.username.data) #取出username里面的value值
        return '数据提交过来了'
    return render_template('user/register.html', form=form)


if __name__ == '__main__':
    manager.run()

效果

表单验证_第3张图片
9.png
表单验证_第4张图片
image

你可能感兴趣的:(表单验证)