概述
在flask中,通常使用flask-wtf来创建一个表单对象,并在表单对象中,对其中的字段进行验证。
准备工作
安装flask-wtf
设置SECRET_KEY
1 2 3 4 5 6 7 8 9 10 11 12 13
| app.config['SECRET_KEY'] = 'xxxxx' 新建config.py
#!/usr/bin/env python #-*- coding:utf-8 -*-
import os class Config(object): SECRET_KEY = '02cc16ca-a181-4fe5-bf7e-3e7820fb9bfb' ...
最后使用 app.config.from_object(Config)
|
使用flask-wtf创建对象
创建表单对象
- render_kw 用于渲染html属性
- validate_xxxfield 用于验证xxx字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class LoginForm(FlaskForm): username = StringField('Username',validators=[DataRequired()],render_kw={ "class":"form-control", "id":"inputEmail3", "placeholder":"Username" }) ... submit = SubmitField("Submit")
class RegisterForm(FlaskForm): username = StringField("请输入用户名:",validators = [DataRequired(),Length(1,16,message='用户名不能超过16个字符'),Regexp(r'[a-zA-Z0-9\u4e00-\u9fa5]',message='只接受字母数字和中文')]) password = PasswordField("请输入密码:",validators = [DataRequired()]) password2 = PasswordField("重新输入密码:",validators=[DataRequired(),EqualTo("password",message="两次输入的密码必须要相同")]) email = StringField("请输入邮箱:",validators = [DataRequired(),Email(message='邮箱格式有误。')]) des = TextAreaField("自我介绍:",validators=[DataRequired()]) submit = SubmitField("提交")
def validate_username(self,username): user = User.query.filter_by(username=username.data).first() if user: raise ValidationError('error') def validate_email(self,email): email = User.query.filter_by(email = email.data).first() if email: raise ValidationError("error")
|
模板应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <form class="form-horizontal" method="POST">
{{ form.hidden_tag() }} <div class="form-group"> {{ form.username.label(class_="col-sm-2 control-label")}} <div class="col-sm-10"> {{ form.username() }} {% for error in form.username.errors %} <span style="color:red">{{ error }}</span> {% endfor %} </div> </div> ... <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> {{ form.submit(class_='class="btn btn-default"')}} </div> </div> </form>
|
视图函数
1 2 3 4 5 6 7
| @auth.route('/login',methods=['GET','POST']) def login(): ... form=LoginForm() if form.validate_on_submit(): ... return render_template('auth/login.html',title='login',form=form)
|