Flask-wtf之form表单

from  flask_wtf  import FlaskForm
from flask_wtf.file import FileRequired, FileAllowed
from wtforms import StringField, PasswordField, SubmitField, FileField
from wtforms.validators import DataRequired, Email, Regexp, EqualTo, ValidationError

from models import User


class LoginForm(FlaskForm):
    name = StringField(
        label='name',
        validators=[
            DataRequired("请输入用户名")
        ],
        render_kw={
            'placeholder': "请输入用户名"
        }

    )

    pwd = PasswordField(
        label="密码",
        validators=[
            DataRequired("请输入密码!")
        ],
        render_kw={
            'placeholder': "请输入密码"
        }

    )
    verify_code=StringField(
        label="验证码",
        validators=[
            DataRequired()
        ]

    )
    submit = SubmitField(
        label="登录",
        render_kw={
            "value": "登录"
        }
    )


class RegisterForm(FlaskForm):
    name = StringField(
        label='用户名',
        validators=[
            DataRequired("请输入用户名")
        ],
        render_kw={
            'placeholder': "请输入用户名"
        }

    )

    email = StringField(
        label="邮箱",
        validators=[
            DataRequired("请输入邮箱"),
            Email("邮箱格式不正确")  ##邮箱格式不正确时
        ]
    )
    phone = StringField(
        label="电话号码",
        validators=[
            DataRequired("请输入电话"),
            Regexp('1\d{10}')  ##正则
        ]
    )
    pwd = PasswordField(
        label="密码",
        validators=[
            DataRequired("请输入密码!")
        ],
        render_kw={
            'placeholder': "请输入密码"
        }

    )
    repwd = PasswordField(
        label="再次输入密码",
        validators=[
            DataRequired("请再次输入密码!"),
            EqualTo('pwd', message="两次密码不一致")  # 比较字符串的不同,并给出messages
        ],
        render_kw={
            'placeholder': "请再次输入密码"
        }


    )

    submit = SubmitField(
        label="注册",
        render_kw={
            "value": "注册"
        }
    )

    def validate_name(self, field):
        name = field.data
        user = User.query.filter_by(name=name).count()
        if user == 1:
            raise ValidationError("昵称已存在")

    def validate_email(self, field):
        email = field.data
        user = User.query.filter_by(email=email).count()

        if user == 1:
            raise ValidationError("邮箱已存在")

    def validate_phone(self, field):
        phone = field.data
        user = User.query.filter_by(phone=phone).count()
        if user == 1:
            raise ValidationError("电话号码已存在")


class UploadForm(FlaskForm):
    file = FileField(
        label="简历",
        validators=[
            FileRequired(),
            FileAllowed(['pdf', 'txt'], '只接受.pdf和.txt格式的简历')

        ]
    )
    submit = SubmitField(
        render_kw={
            "value": "上传",

        }
    )
字段类型    说 明
 StringField    文本字段
 TextAreaField  多行文本字段
 PasswordField  密码文本字段
 HiddenField    隐藏文本字段
 DateField  文本字段,值为datetime.date格式
 DateTimeField  文本字段,值为datetime.datetime格式
 IntegerField   文本字段,值为整数
 DecimalField   文本字段,值为decimal.Decimal
 FloatFiled 文本字段,值为浮点数
 BooleanField   复选框,值为TrueFalse
 RadioField 一组单选框
 SelectField    下拉列表
 SelectMultipleField    下拉列表,可选择多个值
 FileField  文件上传字段
 SubmitField    表单提交按钮
 FormField  把表单作为字段嵌入另一表单
  FieldList 一组指定类型的字段

WTForms验证函数:
验证函数    说 明
Email   验证电子邮件地址
EqualTo 比较两个字段的值,常用于要求输入两次密码确认的情况
IPAddress   验证IPv4网络地址
Length  验证输入字符串的长度
NumberRange 验证输入的值在数字范围内
Optional    无输入值时跳过其他验证函数
Required    确保字段中有数据
Regexp  使用正则表达式验证输入值
URL 验证URL
AngOf   确保输入值在可选值列表中
NoneOf  确保输入值之不在可选值列表中

猜你喜欢

转载自blog.csdn.net/qq_41661056/article/details/81135347