您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Flask wtforms实现表单验证使用

51自学网 2021-10-30 22:23:14
  python
这篇教程Flask wtforms实现表单验证使用写得很实用,希望能帮到您。

wtforms

安装:pip3 install wtforms

使用1(简单版):

from flask import Flask, render_template, request, redirectfrom wtforms import Formfrom wtforms.fields import simplefrom wtforms import validatorsfrom wtforms import widgetsapp = Flask(__name__, template_folder='templates')app.debug = Trueclass LoginForm(Form):    # 字段(内部包含正则表达式)    name = simple.StringField(        label='用户名',        validators=[            validators.DataRequired(message='用户名不能为空.'),            validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')        ],        widget=widgets.TextInput(), # 页面上显示的插件        render_kw={'class': 'form-control'}    )    # 字段(内部包含正则表达式)    pwd = simple.PasswordField(        label='密码',        validators=[            validators.DataRequired(message='密码不能为空.'),            validators.Length(min=8, message='用户名长度必须大于%(min)d'),            validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*/d)(?=.*[$@$!%*?&])[A-Za-z/d$@$!%*?&]{8,}",                              message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')        ],        widget=widgets.PasswordInput(),        render_kw={'class': 'form-control'}    )@app.route('/login', methods=['GET', 'POST'])def login():    if request.method == 'GET':        form = LoginForm()        return render_template('login.html', form=form)    else:        form = LoginForm(formdata=request.form)        if form.validate():            print('用户提交数据通过格式验证,提交的值为:', form.data)        else:            print(form.errors)        return render_template('login.html', form=form)if __name__ == '__main__':    app.run()

login.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>登录</h1><form method="post">    <p>{{form.name.label}} {{form.name}} {{form.name.errors[0] }}</p>    <p>{{form.pwd.label}} {{form.pwd}} {{form.pwd.errors[0] }}</p>    <input type="submit" value="提交"></form></body></html>

使用2(复杂版):

from flask import Flask, render_template, request, redirectfrom wtforms import Formfrom wtforms.fields import corefrom wtforms.fields import html5from wtforms.fields import simplefrom wtforms import validatorsfrom wtforms import widgetsapp = Flask(__name__, template_folder='templates')app.debug = Trueclass RegisterForm(Form):    name = simple.StringField(        label='用户名',        validators=[            validators.DataRequired()        ],        widget=widgets.TextInput(),        render_kw={'class': 'form-control'},        default='alex'    )    pwd = simple.PasswordField(        label='密码',        validators=[            validators.DataRequired(message='密码不能为空.')        ],        widget=widgets.PasswordInput(),        render_kw={'class': 'form-control'}    )    pwd_confirm = simple.PasswordField(        label='重复密码',        validators=[            validators.DataRequired(message='重复密码不能为空.'),            validators.EqualTo('pwd', message="两次密码输入不一致")  # EqualTo也可以做密码验证        ],        widget=widgets.PasswordInput(),        render_kw={'class': 'form-control'}    )    email = html5.EmailField(        label='邮箱',        validators=[            validators.DataRequired(message='邮箱不能为空.'),            validators.Email(message='邮箱格式错误')        ],        widget=widgets.TextInput(input_type='email'),        render_kw={'class': 'form-control'}    )    gender = core.RadioField(        label='性别',        choices=(            (1, '男'),            (2, '女'),        ),        coerce=int # “1” “2”     )    city = core.SelectField(        label='城市',        choices=(            ('bj', '北京'),            ('sh', '上海'),        )    )    hobby = core.SelectMultipleField(        label='爱好',        choices=(            (1, '篮球'),            (2, '足球'),        ),        coerce=int    )    favor = core.SelectMultipleField(        label='喜好',        choices=(            (1, '篮球'),            (2, '足球'),        ),        widget=widgets.ListWidget(prefix_label=False),        option_widget=widgets.CheckboxInput(),        coerce=int,        default=[1, 2]    )    def __init__(self, *args, **kwargs):        super(RegisterForm, self).__init__(*args, **kwargs)        self.favor.choices = ((1, '篮球'), (2, '足球'), (3, '羽毛球'))    def validate_pwd_confirm(self, field):        """        自定义pwd_confirm字段规则,例:与pwd字段是否一致        :param field:        :return:        """        # 最开始初始化时,self.data中已经有所有的值        if field.data != self.data['pwd']:            # raise validators.ValidationError("密码不一致") # 继续后续验证            raise validators.StopValidation("密码不一致")  # 不再继续后续验证@app.route('/register', methods=['GET', 'POST'])def register():    if request.method == 'GET':        form = RegisterForm(data={'gender': 2,'hobby':[1,]}) # initial        return render_template('register.html', form=form)    else:        form = RegisterForm(formdata=request.form)        if form.validate():            print('用户提交数据通过格式验证,提交的值为:', form.data)        else:            print(form.errors)        return render_template('register.html', form=form)if __name__ == '__main__':    app.run()

register.html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><h1>用户注册</h1><form method="post" novalidate style="padding:0  50px">    {% for field in form %}    <p>{{field.label}}: {{field}} {{field.errors[0] }}</p>    {% endfor %}    <input type="submit" value="提交"></form></body></html>

到此这篇关于Flask wtforms实现表单验证使用的文章就介绍到这了,更多相关Flask wtforms表单验证内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


利用Python实现端口扫描器的全过程
python使用pandas按照行数分割表格
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。