诚意
诚意如你,当一诚的态度对待

导航

 

相当于Django中的modelform组件(生成表单、验证)

 

pip3 install WTForms

   

实验一:登录页面

from flask import Flask,render_template,request
from wtforms.fields import simple,core  #创建组件
from wtforms import Form
from wtforms import validators   #验证

app = Flask(__name__)
app.debug=True
app.secret_key='asdf'


class LoginForm(Form):
    username = simple.StringField(
        label='用户名',  #标签标记
        validators=[validators.DataRequired(message='用户名不能为空'),validators.Length(min=3,max=8,message='不是长了就是短了')],
        filters=tuple(),
        description='', #描述标记
        id='login', #标签id
        default=None,#默认值
        widget=None,  #默认组件(input  type='text')在StringField中已经被实例化了
        render_kw={'class':'my_login'}  # {'class':'my_login'}
    )
    password = simple.StringField(
        label='密码',  #标签标记
        validators=[validators.DataRequired(message='密码不能为空'),
                    validators.Length(min=3,max=8,message='不是长了就是短了'),
                    validators.Email(message='密码不符合邮箱规则')],
        filters=tuple(),
        description='', #描述标记
        id='login', #标签id
        default=None,#默认值
        widget=None,  #默认组件(input  type='text')在StringField中已经被实例化了
        render_kw={'class':'my_login'}  # {'class':'my_login'}
    )

@app.route('/',methods=['GET','POST'])
def index():
    if request.method == 'GET':
        fm = LoginForm()
        return render_template('index.html',wtf = fm)
    else:
        new_fm = LoginForm(request.form)
        if new_fm.validate():#验证数据
            return new_fm.data.get('username')
        else:
            return render_template('index.html', wtf=new_fm)

if __name__ == '__main__':
    app.run(debug=True)

 

index.html

<form action="" method="post" novalidate>
    {{ wtf.username.label }}
    {{ wtf.username }}
    {{ wtf.password.label }}
    {{ wtf.password }}
    <p>{{ wtf.username.errors.0 }}</p>
    <p>{{ wtf.password.errors.0 }}</p>
    <input type="submit" value="登录">

</form>

 

测试

 

 

实验二:注册

 

from flask import Flask,render_template,request
from wtforms.fields import simple,core  #创建组件
from wtforms import Form
from wtforms import validators   #验证

app = Flask(__name__)
app.debug=True
app.secret_key='asdf'


class RegForm(Form):

    username = simple.StringField(
        label='用户名',  #标签标记
        validators=[validators.DataRequired(message='用户名不能为空'),validators.Length(min=3,max=8,message='用户名不是长了就是短了')],
    )
    password = simple.StringField(
        label='密码',  #标签标记
        validators=[validators.DataRequired(message='密码不能为空'),
                    validators.Length(min=3,max=8,message='不是长了就是短了'),
                    validators.Email(message='密码不符合邮箱规则')],
    )
    re_password = simple.StringField(
        label='确认密码',  #标签标记
        validators=[validators.EqualTo(fieldname='password',message='两次密码不相同')],
    )
    gender = core.RadioField(
        label="性别",
        coerce=str,
        choices=(
            ("1",""),
            ("2","")
        ),
        default="1"
    )

    hobby = core.SelectMultipleField(
        label="爱好",
        validators=[validators.Length(min=2,max=4,message="癖好有问题")],
        coerce=int,
        choices=(
            (1, "fengjie"),
            (2, "luoyufeng"),
            (3, "lixueqin"),
            (4, "wuyifan"),
            (5, "panta")
        ),
        default=(1,3,5)
    )



@app.route('/reg',methods=['GET','POST'])
def reg():
    if request.method == 'GET':
        rf = RegForm()
        return render_template('reg.html',rf = rf)
    else:
        rf = RegForm(request.form)
        if rf.validate():#验证数据
            return rf.data.get('username')
        else:
            return render_template('reg.html', rf=rf)


if __name__ == '__main__':
    app.run(debug=True)

 

reg.html

<form action="" method="post" novalidate>
    {% for field in rf %}
        <p>{{ field.label }}{{ field }} {{ field.errors.0 }}</p>
    {% endfor %}
    <input type="submit" value="注册">

</form>

 

 

测试

 

posted on 2019-01-14 21:59  诚意  阅读(146)  评论(0)    收藏  举报