flask-wtf

web 表单扩展

  • -  生成表单组件的HTML代码
  • -  后台验证
  • -  向web端返回错误信息
  • -  在web页面显示错误信息
  • -  防止跨域访问

pip3 install flask-wtf

 

 
# 简单表单组件
from flask import Flask,request,render_template
from flask_wtf import FlaskForm
from wtforms import TextField,IntegerField,TextAreaField,BooleanField,DateField, PasswordField,RadioField,SelectField,SelectMultipleField,SubmitField,validators
app = Flask(__name__)
app.secret_key ='sdjsldj4323sdsdfssfdf43434'

class ContactForm(FlaskForm):
    name = TextField('姓名',[validators.Required('姓名必须输入')])
    age = IntegerField('年龄',[validators.Required('必须输入年龄'),
                             validators.NumberRange(10,30,'年龄必须在10到30之间')])
    birth = DateField('出生日期',[validators.Required('必须输入出生日期')])
    isStudent = BooleanField('是否为学生')
    resume = TextAreaField('简历',[validators.Length(10,200,'简历长度必须在10到200个字符之间')])

    radio = RadioField('请选择一个', choices=[('值1', '选项1'), ('值2', '选项2'), ('值3', '选项3')],
                       validators=[validators.AnyOf(['值1', '值2', '值3'], '请选择一个值')])
    select = SelectField('请选择一个选项', choices=[('值1', '选项1'), ('值2', '选项2'), ('值3', '选项3')],
                         validators=[validators.AnyOf(['值2'], '请选择第二项')])
    selectMultiple = SelectMultipleField('请选择多个选项', choices=[('值1', '选项1'), ('值2', '选项2'), ('值3', '选项3')],
                                         validators=[validators.AnyOf([['值1', '值2'], ['值1', '值3']], '只能选择前两项或第1项、第3项')])

    email = TextField('Email', [validators.Required('请输入Email'), validators.email('请输入正确的Email地址')])
    ip = TextField('IP', [validators.Required('请输入IP地址'), validators.IPAddress(message='请输入正确的IP地址')])
    password1 = PasswordField('密码', [validators.Required('请输入密码')])
    password2 = PasswordField('确认密码', [validators.Required('请确认密码'), validators.EqualTo('password1', '两次输入的密码不一致')])

    value = TextField('电子邮件', [validators.Email('Email格式不正确'), validators.optional()])
    url = TextField('Url', [validators.URL(message='Url格式不正确'), validators.optional()])

    regexpValue = TextField('正则表达式', [validators.Regexp('^[a-z]{3}-[1-9]{3}$', message='格式错误,正确格式:abc-123'),
                                      validators.Optional()])





    submit = SubmitField('提交')
@app.route('/', methods=['GET','POST'])
def contact():
    form = ContactForm()
    form.age.data= 18
    ok = False
    if request.method == 'POST':
        if form.validate_on_submit() == False:
            print('error')
        else:
            print('输入成功')
            print('姓名:',form.name.data)
            print('年龄:', form.age.data)
            print('出生日期:',form.birth.data)
            if form.name.data == 'John':
                form.name.data = "Joe"
            ok = True
         
    return render_template('simple.txt',form=form,ok=ok)
if __name__ == '__main__':
    app.run(host = '0.0.0.0', port='1234')

 

 

 

<html>
    <head>
       <meta charset='UTF-8'>
       <title>Flask-WTF支持的简单表单组件</title>
    </head>
    <body>
    {% if ok %}
    <script>
       alert('数据录入成功.')
    </script>
    {% endif %}

    {% for message in form.name.errors %}
        <div>{{message}}
    {% endfor %}
    {% for message in form.age.errors %}
        <div>{{message}}
    {% endfor %}
    {% for message in form.birth.errors %}
        <div>{{message}}
    {% endfor %}
    {% for message in form.isStudent.errors %}
        <div>{{message}}
    {% endfor %}

    {% for message in form.resume.errors %}
        <div>{{message}}
    {% endfor %}


    <form action='http://localhost:1234' method=post>
    <fieldset>
        {{form.hidden_tag()}}
        {{form.name.label}}<br>
        {{form.name}} <br>
        {{form.age.label}}<br>
        {{form.age}}  <br>
        {{form.birth.label}}<br>
        {{form.birth}}  <br>
        {{form.isStudent.label}}
        {{form.isStudent}}  <br>

        {{form.resume.label}}<br>
        {{form.resume}}


        {{form.radio.label}}<br>
        {{form.radio}}<br>
        {{form.select.label}}<br>
        {{form.select}}
        {{form.selectMultiple.label}}<br>
        {{form.selectMultiple}}

         {{form.email.label}}<br>
        {{form.email}}  <br>
        {{form.ip.label}}<br>
        {{form.ip}}  <br>
        {{form.password1.label}}<br>
        {{form.password1}}  <br>
        {{form.password2.label}}<br>
        {{form.password2}}  <br>
        {{form.value.label}}<br>
        {{form.value}}  <br>
        {{form.regexpValue.label}}<br>
        {{form.regexpValue}}  <br>
        {{form.url.label}}<br>
        {{form.url}}





        <br>
        <br>
        {{form.submit}}
    </fieldset>
    </form>
    </body>
</html>

 

 

 

posted @ 2019-03-04 18:09  慕沁  阅读(277)  评论(0)    收藏  举报